0
我正在NetBeans中創建一個應用程序,並且希望有一個狀態標籤來說明在任何特定時刻程序中發生了什麼。有很多代碼,但是它的功能大致如下:只需假裝statusLabel是已經放入程序的標籤,並且每個函數都是一個耗時幾秒鐘的昂貴函數。如何更新標籤以使其顯示新文本?
statusLabel.setText("Completing Task 1");
System.out.println("Completing Task 1");
this.getFrame().repaint(); //I call this function and the two functions below it but the label still does not change.
statusLabel.updateUI(); //Doesn't seem to do much.
statusLabel.revalidate(); //Doesn't seem to do much.
this.completeTask1();
statusLabel.setText("Completing Task 2");
System.out.println("Completing Task 2");
statusLabel.revalidate();
this.getFrame().repaint();
...
這一直持續到UI完成4項任務。在整個過程中,標籤不會更新,直到每個任務完成後,然後它會顯示「完成任務4」。 System.out.println調用雖然完美。基本上我想知道我應該怎麼做才能讓標籤顯示它已經設置的新文本。
這需要多線程。您的標籤沒有更新,因爲您的唯一線程正在用於運行在「後臺」中運行的其他代碼,直到完成,您的GUI不會更新。多線程在需要時未被使用時的一個常見問題。這是關於[Concurrency]的Java Oracle教程(http://docs.oracle.com/javase/tutorial/essential/concurrency/),它包含了解決您的問題需要了解的多線程的一切,並且是完美的開始學習關於編程的更困難和必要的概念之一。 http://docs.oracle.com/j – CODe 2012-11-10 04:41:03