如何摆脱;“死亡”;Java中的windows?
我正在使用一些遗留代码。在执行过程中,该代码创建多个窗口并对其进行处理。但是,它们仍然是可访问的,即调用如何摆脱;“死亡”;Java中的windows?,java,swing,dispose,Java,Swing,Dispose,我正在使用一些遗留代码。在执行过程中,该代码创建多个窗口并对其进行处理。但是,它们仍然是可访问的,即调用java.awt.Window.getWindows()返回大量java.awt.Window、javax.swing.JFrame、javax.swing.JDialog等,所有这些名称都以“dead-”开头。这现在越来越成为一个问题 下面是我的问题:我是否正确,名称的“dead-”前缀是由系统创建的? 如何正确处理旧窗口,使其不再可访问,并由java.awt.Window.getWindo
java.awt.Window.getWindows()
返回大量java.awt.Window
、javax.swing.JFrame
、javax.swing.JDialog
等,所有这些名称都以“dead-”开头。这现在越来越成为一个问题
下面是我的问题:我是否正确,名称的“dead-”前缀是由系统创建的?
如何正确处理旧窗口,使其不再可访问,并由
java.awt.Window.getWindows()返回?非常感谢 我在项目中发现了以下代码:
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);
}
}
});
}
这就是为什么这些窗口被命名为“死-”的原因
但是,它们被正确地处理,仍然显示在由java.awt.Window.getWindows()返回的Windows数组中。为了摆脱它们,我必须创建一个单独的ThreadGroup
,并通过SunToolkit.createNewAppContext()创建一个单独的AppContext
代码>。在我的例子中,处理AppContext也正确地处理了窗口。另请参见。您能否提供一段代码,显示遗留代码当前如何创建/处置windows。顶级容器不进行GC'ed,那么所有容器都可以访问,直到当前JVM存在,结果应该是重用合理数量的容器(减少到一次可在屏幕上看到的最大容器数量)这些容器并不是死的,只有从isDisplayable返回false的容器才有可访问的all JOptionPanes,但是通过从其父级JDialogSee强制转换,也可以看到这个相关的。