我正在处理一些遗留代码。在执行期间,该代码创建多个窗口并处理它们。但是,它们仍然可以访问,即调用java.awt.Window.getWindows()
会返回大量java.awt.Window
,javax.swing.JFrame
,javax.swing.JDialog
等等,所有这些名称都以“dead”开头 - ”。这现在越来越成为一个问题。
所以这是我的问题:我是否正确,名称的'dead-'前缀是由系统创建的?
我该怎样做才能妥善处理旧窗口,使java.awt.Window.getWindows()
无法再访问它们?非常感谢!
答案 0 :(得分:1)
我在项目中找到了以下代码:
private void disposeWindow(final java.awt.Window window) {
SwingEnvironment.runOnEventDispatchingThread(new Runnable() {
@Override
public void run() {
window.dispose();
window.setVisible(false);
window.removeNotify();
String oldName = window.getName();
if (oldName == null) {
oldName = "unnamed";
}
if (!oldName.startsWith("dead-")) {
window.setName("dead-" + oldName);
}
}
});
}
所以这就是windows被命名为'dead-'的原因。
但是它们已正确处理并仍显示在java.awt.Window.getWindows()
返回的Windows数组中。为了摆脱它们,我必须创建一个单独的ThreadGroup
并通过AppContext
创建一个单独的SunToolkit.createNewAppContext();
。在我的情况下,处理AppContext也正确地处理了Windows。另请参阅http://kingsfleet.blogspot.de/2009/10/how-to-have-more-than-one-instance-of.html。