我有一个简单的Groovy脚本,该脚本从其执行的主线程需要向用户显示一些对话框。
我的挥杆知识有限且生疏,但我回想起曾经读过的有关谨慎将GUI内容保留在事件调度线程(EDT)上的知识。
如果我只是从主线程调用静态JOptionPane.showMessageDialog
方法,那我是否正确,认为这违反了将GUI内容保留在EDT上的正确做法?
我是否应该像下面的示例代码中那样实际使用swing.utils.invokeAndWait方法?
void showHelloThereDialog()
throws Exception {
Runnable showModalDialog = new
Runnable() {
public void run() {
JOptionPane.showMessageDialog(
myMainFrame, "Hello There");
}
};
SwingUtilities.invokeAndWait
(showModalDialog);
}
现在,除了invokeAndWait完成后的消息对话框之外,以上内容不执行任何操作来使值可用。
大概的事实是,时髦的“闭包”实现了Runnable将使代码比上面更简单。
是否需要invokeAndWait?如果可以的话,请提供正确实现的示例,以使用groovy获得诸如confirmDialog之类的结果?
最佳答案
看一下groovy.swing.SwingBuilder,它封装了invokeAndWait和invokeLater。您的示例可以写成:
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.*
def swing = new SwingBuilder()
def myMainFrame = new Frame()
swing.edt {
JOptionPane.showMessageDialog(
myMainFrame, "Hello There");
}