我正在編寫一個應用程序,它使用SwingWorker
執行其文件菜單操作。每個調用的方法返回一個值boolean
,該值告訴操作是否成功執行。如何讀取SwingWorker的結果*而無需等待?
目前我使用的繁忙等待結果,這樣的:
public boolean executeOperation() {
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
// ..
if (aborted) {
return false;
}
// ..
return true;
}
};
worker.execute();
// busy wait
while (!worker.isDone())
;
try {
return worker.get().booleanValue();
} catch (Exception e) {
// handle exceptions ..
return false;
}
}
是否有解決這個的少輪詢激烈的方式?
使用worker.get()
直接是行不通的,因爲它會阻止EDT,等待完成的任務 - 這意味着即使我從SwingWorker
中打開對話框不會得到畫。
編輯:如果可能,我想避免該方法(或工作人員)異步溝通其結果。我正在執行幾個相互依賴的簡短方法(文件 - >打開,新建,關閉,保存,另存爲,退出)(即當試圖退出,退出調用close,close可能調用save,save可能調用save如)。異步解決似乎會使代碼變得更加複雜。
您可以隨時在循環中放入Thread.sleep(100)。 –
這並不會改變您對結果進行輪詢的事實,而不是讓對象進行計算來告訴您何時完成。 – mcfinnigan