java - isGUIInitialized() 为 false,现在怎么办?

标签 java swing user-interface awt

我一直在查看一些代码,发现人们在这样做

 public static void main(String[] args) {
     new ExampleCode();
      }
 ExampleCode () {
      EventQueue.invokeLater(this);
    }

    public void run() {
        if (EventQueueMonitor.isGUIInitialized()) {
          guiInitialized();
        } else {
          EventQueueMonitor.addGUIInitializedListener(this);
        }
  }

这是有道理的,但现在我的问题是他们如何保持代码运行。据我了解,代码进入 main--->ExampleCode--->Run 然后停止,因为 GUI 未初始化。是否有任何调用在其他地方启动 GUI?我在我的程序上使用相同的步骤,但我的 GUI 未初始化。

我的两个示例代码:

http://java.sun.com/javase/technologies/accessibility/docs/jaccess-1.1/examples/Explorer/Explorer.java

http://www.java2s.com/Code/Java/Swing-JFC/AGUItoshowaccessibleinformationcomingfromthecomponentsinan.htm

最佳答案

您发布的示例使用与辅助功能相关的功能,因此初始化可能需要更多时间。我们在使用 Swing 时遵循的做法是避免对事件队列进行大量初始化。原作者的逻辑是等待swing jframe等初始化完成,然后初始化自己的组件。

// Check to see if the GUI subsystem is initialized correctly. (This is needed in JDK 1.2 and higher). If it isn't ready, then we have to wait. 

  if (EventQueueMonitor.isGUIInitialized()) { 
    createGUI(); 
  } else { 
    EventQueueMonitor.addGUIInitializedListener(this); 
  } 
} 

public void guiInitialized() { 
  createGUI(); 
}

实际的初始化逻辑写在createGUI方法中,该方法要么由Swing调用,要么由您自己的逻辑调用。您的程序不会终止,因为 Swing 使用它自己的非守护线程(即,除非您调用 System.exit,否则您的 swing 程序不会终止)。

关于java - isGUIInitialized() 为 false,现在怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532111/

相关文章:

java - 基于 Swing 的应用程序的 Eclipse 或 Netbeans?

java - 如何防止 JTextPane.setCaretPosition(int) 中的内存泄漏?

c++ - 用于使用 XML 中定义的 GUI 创建 C++ native 应用程序的库?

iphone - UIImagePickerController allowedEditing=YES 问题

java - Tomcat 显示空白页 - GWT devmode 工作正常

java - 将权限掩码转换为 GetPermissionCollection 的角色

java - 通过带注解的 Getter 方法获取 Java 类中的字段

java - SequenceInputStream 构造函数仅选择第一个输入流并忽略其余部分

java - 为什么我的照片不再显示了

c# - 使用左列标题创建动态表的最佳方法