Java SwingUtilities.invokeAndWait未运行
未执行run()方法中的代码。谁能告诉我为什么Java SwingUtilities.invokeAndWait未运行,java,swing,swingutilities,Java,Swing,Swingutilities,未执行run()方法中的代码。谁能告诉我为什么 startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { if(creator == null) { String[] args = getArguments(); try {
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(creator == null) {
String[] args = getArguments();
try {
writeSettingsFile(args);
} catch(IOException io) {}
consolePanel.addLine("Starting...");
bar.setIndeterminate(true);
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
MessageConsole console = new MessageConsole(getConsole().getTextPane(), self, null);
console.redirectOut(new Color(240, 240, 240), null);
console.redirectErr(Color.RED, null);
console.setMessageLines(consolePanel.getHeight() / 17);
try {
SomeApp.main(getArguments());
} catch (Exception ex) {
Logger.getLogger(OSXWorldPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
} catch (InterruptedException ex) {
Logger.getLogger(OSXWorldPanel.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(OSXWorldPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
抛出错误:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1017)
at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1320)
如果您在EDT中,则不必调用invokeAndWait。在您的示例中,您似乎在EDT中。您确定不是吗?你把System.out.println()放进去了吗?我敢肯定。当我按下按钮时,不会调用run()方法。即使使用println,它也不会显示任何内容。那么,它在哪里停止?是否调用了actionPerformed?是否已达到creator==null并计算为true?编辑:我发现了一个错误,雅各布,你在事件中争论thead(EDT)。您不需要/不必使用invokeAndWait。直接调用代码而不使用invokeAndWait和runnable。我该如何解决这个问题?我使用了一个线程,然后我使用了SwingWorker,但他们都锁定了我的GUI。。。考虑到
SomeApp.main(getArguments())代码>是一个非常繁重的过程。启动一个普通线程并在该线程中执行该任务,完成该任务后,在工作线程内调用invokeAndWait并将代码放入其中以更新UI。