我一直在使用以下方法創建組件並從Swing返回到/從EDT外部返回值。例如,下面的方法可以是一個擴展JFrame
,以創建JPanel
並將其添加到父JFrame
:使用invokeAndWait從Swing返回值
public JPanel threadSafeAddPanel() {
final JPanel[] jPanel = new JPanel[1];
try {
EventQueue.invokeAndWait(new Runnable() {
public void run() {
jPanel[0] = new JPanel();
add(jPanel[0]);
}
});
} catch (InterruptedException ex) {
} catch (InvocationTargetException ex) {
}
return jPanel[0];
}
本地1-長度陣列被用來從Runnable
內部傳送「結果」 ,這在EDT中被調用。那麼,它看起來「有點」哈克,所以我的問題:
- 這是否有道理?其他人在做這樣的事嗎?
- 1長度數組是傳遞結果的好方法嗎?
- 有沒有更簡單的方法來做到這一點?
1.你說得對:-) 2.好的,但invokeAndWait這樣做。 3.也許我應該使用它,但對於簡單的「吸氣劑」來說,這有點矯枉過正。 – 2010-03-08 13:50:17
2.哦,對了,那個沒有註冊。 – 2010-03-08 13:52:19
1. SwingWorker不是您可以用來修復Swing應用程序中的所有線程問題的錘子。 2. SwingWorker是用於在後臺線程上運行的東西,但這個問題是關於創建一個面板,它必須在EDT上運行 - 與SwingWorker可以幫助您完成的操作完全相反。 – Trejkaz 2014-03-21 02:07:24