我試圖用的SwingWorker與結果進行冗長的任務和更新的JLabel:的Java GUI凍結甚至SwingWorker的
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
return doCalculation();
}
protected void done() {
try {
label.setText(get());
} catch (InterruptedException e) {
System.out.println("thread was interrupted");
} catch (ExecutionException e) {
System.out.println("there was an ExecutionException");
}
}
}.execute();
}
});
我可以單擊該按鈕多次,因爲我喜歡和GUI將保持響應,直到兩個線程完成,此時Gui在線程運行時凍結。如果我一次只運行一個線程,這個問題仍然會發生。
如果有人能指出我是否錯誤地使用了SwingWorker,或者如果有另一個我不知道的問題,我會很感激。謝謝你的時間。 伊恩
編輯
的doCalculation()是隻是一些耗時:
private String doCalculation() {
for (int i = 0; i < 10000000; i++) {
Math.pow(3.14, i);
}
return threads++ + "";
}
到目前爲止,我沒有發現任何明顯錯誤的代碼,但我認爲這裏的關鍵是'doCalculation();'方法中發生了什麼。你能發佈這個代碼嗎? –