Avr*_*gon 5 java swing swingworker invokelater event-dispatch-thread
从swing工作者与EDT交互的常用方法是使用get()方法.但我有一个很长的任务和代码,如下所示:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
MyGlobalGUIConsole.addMessage("Done for " + o);
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数tutotials中,建议使用返回值从SwingWorker返回到EDT,但我可以:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyGlobalGUIConsole.addMessage("Done for " + o);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
你可以,但有SwingWorker的设计报告后台任务的进度的方法:你叫publish()
从doInBackground()
发布的进步,你重写process()
(这被称为在美国东部时间),以显示进度.所以上面的代码可以改写为:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
publish("Done for " + o);
}
}
@Override
protected void process(List<String> messages) {
for (String message : messages) {
MyGlobalGUIConsole.addMessage(message);
}
}
Run Code Online (Sandbox Code Playgroud)