我有這樣的代碼:Swing invokeLater永不出現,invokeAndWait拋出錯誤。我能做什麼?
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
try {
dialog.handleDownload();
} catch (IOException io) {
io.printStackTrace();
}
}
});
} catch(Exception io) { io.printStackTrace(); }
在
handleDownload
我讀的InputStream,計算一個進度條的值,並將其設置到。所以,當我點擊一個按鈕時,一個新的JFrame打開並執行上面所寫的所有內容。
如果我自己有dialog.handleDownload
(沒有SwingUtilities方法),它會凍結,直到操作完成。如果我將它添加到invokeLater
中,它會非常快地關閉(我看不到任何東西,操作未完成)。如果我將它添加到invokeAndWait
中,則得到invokeAndWait
不能從事件分派器線程錯誤中調用。我該怎麼辦?
這是一個非常好的例子。我會改變這個循環:'for(int i = 0; i <100; i ++){ \t num + = 5; \t publish(num); \t Thread.sleep(100); \t}' – jjnguy 2010-06-14 18:41:42
@jjnguy:在這個例子中,我實際上想要證明發布次數並不決定多少次調用過程(即,中間結果會自動爲你整理)。增加睡眠會將其改變爲1:1的比例。是否有特定的理由表明我錯過了? – 2010-06-14 19:01:11
@Mark,在我的機器上,這個號碼剛剛起飛,對我來說似乎沒有任何意義。讓它移動得慢一點幫助我看看實際發生了什麼。 – jjnguy 2010-06-14 19:24:38