2012-04-03 86 views
1

我正在寫一個button.In事件,在我使用的方式,我在這個按鈕代碼中使用execute方法swingworker。一切工作正常,但問題是,我想在execute方法結束後顯示一個面板。發生什麼事是面板出現在執行方法完成其任務之前。這裏是我的代碼。一旦執行方法完成其任務面板出現在SwingWorker執行方法之前完成其任務

   Main f2=new Main(); 
       f2.getfile(FileName,0); 
       f2.execute(); 
       Panel.setVisible(true); 
       Panel.setSize(815, 587); 

編輯: 那麼我已經找到了解決,對於此,如果任何人面臨着同樣的疑難問題已經創建了一個方法(稱之爲showPanel)在GUI類,並且當完成的SwingWorker方法具d被調用,然後在那個完成的方法中,我調用showPanel方法來顯示面板。

+0

不會在execute()方法工作結束時添加面板創建? – 2012-04-03 08:54:41

+0

@JimmyGustafsson面板出現在執行方法完成之前的任務 – Xara 2012-04-03 09:00:44

+0

請學習java命名約定並堅持使用 – kleopatra 2012-04-03 09:55:47

回答

2

SwingWorker在另一個Thread(稱爲類javadoc中的工作線程),然後是EDT中執行其工作,並允許在其執行期間/之後更新事件調度線程。

爲什麼之前execute方法完成在class Javadoc of the SwingWorker類,這顯然是提到了你的面板變得可見的原因必讀:

的execute()方法被調用這個線程。它調度SwingWorker在一個工作者線程的執行,並立即返回

SwingWorker的用法示例見this answer,或諮詢Swing concurrency tutorial以獲取更多信息。

+0

_SwingWorker將在EDT上執行其後臺任務,並阻止您的UI_ehhh ...不。執行可以從_any_線程調用(只需讀取引用,重點在_schedules_和_worker thread_ :)它不會阻塞調用線程,這是@Zara正在觀察的:execute()下面的代碼行是立即執行 – kleopatra 2012-04-03 10:05:05

+0

@kleopatra你是完全正確的。在發佈之前,我有另一個(不正確)的答案版本,並且認爲我在閱讀SwingWorker javadoc後糾正了所有問題。我描述的行爲可能發生在您將run方法調用爲execute方法時。我從我的答案中刪除了不正確的部分 – Robin 2012-04-03 10:10:00

相關問題