gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:05 26 4
gpt4 key购买 nike

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

但是,我们在调用单例的每个位置都没有 ID,我们也不希望将 ID 传播到所有位置。识别我们正在运行的小程序上下文的最简单方法是什么? (我试过搞乱类加载器、线程组、线程 ID……到目前为止,我找不到任何能让我识别调用来源的东西)。

最佳答案

单例狗是邪恶的,你还指望什么? ;)

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

其他技巧:

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

如果你在一个 per-applet 实例线程中,那么你可以设置一个 ThreadLocal。

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

关于java - 如何在不传递 ID 的情况下识别在哪个 Java Applet 上下文中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com