gpt4 book ai didi

java - 如何摆脱 Java 中的 "dead"窗口?

转载 作者:行者123 更新时间:2023-11-30 11:16:24 26 4
gpt4 key购买 nike

我正在处理一些遗留代码。在执行期间,该代码创建多个窗口并处理它们。但是,它们仍然可以访问,即调用 java.awt.Window.getWindows() 返回一个大型数组 java.awt.Windowjavax.swing。 JFramejavax.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);
}
}
});
}

所以这就是窗口被命名为“dead-”的原因。

但是,它们已被妥善处理,并且仍然出现在 java.awt.Window.getWindows() 返回的 Windows 数组中。为了摆脱它们,我必须创建一个单独的 ThreadGroup 并通过 SunToolkit.createNewAppContext(); 创建一个单独的 AppContext。在我的案例中,处理 AppContext 也正确处理了 Windows。另见 http://kingsfleet.blogspot.de/2009/10/how-to-have-more-than-one-instance-of.html .

关于java - 如何摆脱 Java 中的 "dead"窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24888348/

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