如何摆脱"死亡" Java中的窗口?

时间:2014-07-22 13:11:32

标签: java swing dispose

我正在处理一些遗留代码。在执行期间,该代码创建多个窗口并处理它们。但是,它们仍然可以访问,即调用java.awt.Window.getWindows()会返回大量java.awt.Windowjavax.swing.JFramejavax.swing.JDialog等等,所有这些名称都以“dead”开头 - ”。这现在越来越成为一个问题。

所以这是我的问题:我是否正确,名称的'dead-'前缀是由系统创建的? 我该怎样做才能妥善处理旧窗口,使java.awt.Window.getWindows()无法再访问它们?非常感谢!

1 个答案:

答案 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