java如何在事件调度线程上运行类的所有方法
我创建了一个Swing组件,它有几种方法。我希望这个类的所有方法都在Swing事件调度线程(EDT)上运行,而调用程序在工作线程上运行。目前我脑海中唯一的解决方案是:
对于此类中的每个方法:
public void a(params)
我应该将其重命名为:
private void aOnEDT(params)
并添加另一种方法:
public void a(params) {
SwingUtilities.invokeAndWait(new Runnable(){
public void run() {
aOnEDT(params);
}
});
}
但这不是很恶心吗?我该怎么做
# 1 楼答案
您可以测试当前是否正在EDT上进行调用,如果不是,则将
Runnable
放入SwingUtilites.invokeLater()
:如果您在EDT上,这将保持方法运行,而不会将其置于事件队列的末尾
# 2 楼答案
使用SwingWorker并在done()方法中更新GUI组件。用donInBackground()方法做背景工作