2011-05-24 25 views
3

我的Java Applet中有一個JButton。按下它之後,ActionListener必須執行大量操作。因此,當用戶點擊按鈕時,它會「保持按下」一段時間(有時甚至是5分鐘),而不是立即禁用它(它會在這5分鐘後自動禁用)。在Java Applet中單擊後JButton「保持按下」

public void actionPerformed(ActionEvent e) { 
    JButton.setEnabled(false); 
    //... 
} 

我不希望用戶看到。我希望所有這些行動在後臺執行。我能做些什麼來實現它?

回答

4

的問題是,在GUI線程繁忙,不會重新繪製組件,直到處理已經finsihed

你可以做的研究背景線程的活動。

+0

你的第一個建議是正確的,後臺線程,但你的關於Swing和調用的getGraphics更新的第二個建議是不正確的,誤導性的。我建議你刪除它。 – 2011-05-24 15:05:00

+0

@Hovercraft你是對的,我刪除它 – 2011-05-24 15:13:54

+0

謝謝你,我刪除了我的倒票,並將其改爲加票。 – 2011-05-24 15:36:39

8

您應該在另一個線程中執行如此密集的任務,而不是調度程序線程。

一些有用的閱讀:Worker Threads and SwingWorker

+0

謝謝你的回答。不幸的是,有幾個線程定義並假設在actionPerformed()中啓動。所以,將所有這些都放到另一個線程中並不是一個非常理想的想法,是嗎? – Jerry 2011-05-24 15:15:02

+0

你在處理時做的第一件事是禁用按鈕,最後一個 - 啓用它。它應該禁止用戶在處理時單擊該按鈕。 – Sorrow 2011-05-24 15:17:58

+0

@明天:沒錯。這就是爲什麼我把開始放在「JButton.setEnabled(false);」。執行完所有操作後,按鈕將再次啓用。 – Jerry 2011-05-24 15:22:48