【问题标题】:How could I get the number of visible windows of my app?我怎样才能获得我的应用程序的可见窗口数量?
【发布时间】:2011-10-27 05:10:36
【问题描述】:

或更准确地说:

我需要知道窗口关闭事件是否还有其他窗口可见。

如果没有,System.exit(0) 将被调用。

【问题讨论】:

    标签: java swing window awt jframe


    【解决方案1】:

    1) I need to know on a window close event

    WindowConstantsWindowEvent

    2)if any other window is still visible.

    您可以通过使用Window[] wins = Window.getWindows(); 测试其可见性或添加WindowStateListener 来获得Top-Level Containers 的数量

    一些重要通知here

    【讨论】:

      【解决方案2】:

      试试

      if(Frame.getFrames().length == 0) {
          // work here.
      }
      

      Framejava.awt.Frame,这是JFrame 的父级,所以你也会捕获它们)。

      【讨论】:

        【解决方案3】:

        感谢大家的回答。有了这个帮助,我设法得到了一个可行的解决方案:

        奇怪,它不适用于windowClosed。仅适用于windowClosing

        代码

        public final class CloseOnLastWindowListener extends WindowAdapter {
        
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("\tCLOSING!!!");
        
                int nRelevant = 0;
                for (Window w : Window.getWindows()) {
                    // get only visible windows, except the one being closed
                    if (w != e.getWindow() && w.isVisible()) {
                        System.out.println("\tRELEVANT: " + w);
                        ++nRelevant;
                    } else {
                        System.out.println("\tirrelevant: " + w);
                    }
                }
        
                if (nRelevant == 0) {
                    System.out.println("\tEXIT!!!");
                    System.exit(0);
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          我需要知道窗口关闭事件是否还有其他窗口可见。如果没有,System.exit(0) 会被调用。

          只需使用:

          frame.dispose();
          

          当最后一个窗口关闭时,JVM会自动退出。

          或者当您创建框架和对话框时使用:

          frame.setDefaultCloseOperation(JFrema.DISPOSE_ON_CLOSE);
          

          【讨论】:

          • “当最后一个窗口关闭时,JVM 将自动退出”:只有在不与 Java Web Start 一起使用并且没有非守护进程运行线程的情况下才会如此。在使用 Swing 打开需要手动处理的父框架的模态对话框时,您也可能会遇到问题。
          • "frame.setDefaultCloseOperation(JFrema.DISPOSE_ON_CLOSE);":这没有回答 OP 的问题,他希望最后一个关闭的框架退出应用程序,而不仅仅是其中任何一个。
          • @jfpoilpret -- 很好的反对意见,我本来打算使用 Webstart。
          • @jfpoilpret,嗯,我刚刚更新了我的Alpha Container webstart 应用程序以使用“DISPOSE_ON_CLOSE”。当我单击“启动”按钮时,应用程序启动并显示在 Windows 任务管理器中。当我单击关闭按钮时,它会关闭并从 Windows 任务管理器中删除。这不是说JVM已经退出了吗?
          • @camickr 是的,这很奇怪,也许他们已经在最近的 Java 插件中修复了这个错误?几年前基里尔写了一篇关于它的好帖子:pushing-pixels.org/2008/01/14/…
          猜你喜欢
          • 2012-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多