我一直在查看一些代码,发现人们在这样做
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 未初始化。
我的两个示例代码:
最佳答案
您发布的示例使用与辅助功能相关的功能,因此初始化可能需要更多时间。我们在使用 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/