2013-04-06 24 views
0

我對Swing很新穎。如何在Java Swing中製作按鈕點擊塊?

itemActionButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent arg) { 
     itemAction(); 
    } 
}); 

但被點擊的,而不是運行在另一個線程這個動作的按鈕時,我想父窗體的線程等待,直到它的動作是刷新前完成,使額外的點擊等

我怎樣才能做到這一點?在的ActionListener

+1

我還以爲你。從actionPerformed內部運行該操作將繼續阻止EDT。您可以禁用電子按鈕(點擊),運行在一個SwingWorker的動作和可出租從SwingWorker類的done方法 – MadProgrammer 2013-04-06 02:09:12

+0

保羅,你可以在這裏看到的按鈕:http://stackoverflow.com/questions/8083768/stop-cancel- swingworker-thread – Gere 2013-04-06 02:11:08

+0

正如已經指出的,我在這裏的主線程中運行。事實證明,我正在從別處的TimerTask間接調用'itemAction()'。爲了讓'itemAction()'在主線程上運行,我不得不使用'SwingUtilities.invokeLater()'。 – 2013-04-12 18:26:16

回答

1

代碼執行的EDT,這防止重畫和響應其它事件的GUI。

如果你有一個長期運行的任務,你不想阻止EDT,那麼你需要使用另一個線程。

閱讀來自於Concurrency Swing的教程部分獲取更多信息,並通過使用的SwingWorker的溶液。