如何在不传递ID的情况下识别运行的Java Applet上下文?

Ran*_*ron 6 java applet swing

我是开发一个非常大的Swing Java Applet的团队的一员.我们的大多数代码都是遗留的,并且有大量的单例引用.我们将它们全部捆绑到一个"应用程序上下文"单例中.我们现在需要的是创建一些方法来分离共享上下文(在当前显示的所有applet之间共享)和非共享上下文(特定于当前显示的每个applet).

但是,我们在调用单例的每个位置都没有ID,也不想将ID传播到所有位置.什么是识别我们正在运行的applet上下文的最简单方法?(我已经尝试搞乱类加载器,线程组,线程ID ......到目前为止,我找不到任何可以让我识别调用原点的东西).

Tom*_*ine 3

单身人士是邪恶的,你还指望什么?;)

也许最全面的方法是在不同的类加载器中加载大部分 applet(使用 java.net.URLClassLoader.newInstance)。然后使用 Wea​​kHashMap 将类加载器与小程序关联起来。如果您可以将大部分代码拆分到一个公共类加载器(作为每个小程序类加载器的父级)和普通小程序代码库中,那么速度会更快,但工作量也会更大。

其他黑客:

如果您有权访问任何组件,则可以重复使用 Component.getParent 或 SwingUtilities.getRoot。

如果您处于每个小程序实例线程中,那么您可以设置一个 ThreadLocal。

从 EDT 中,您可以从队列 (java.awt.EventQueue.getCurrentEvent()) 读取当前事件,并可能从中找到一个组件。或者使用重写的dispatchEvent方法推送EventQueue。