2011-10-22 145 views
2

我的應用程序由兩個類文件組成,我們稱它們爲A和B. A是主要文件 - 執行的文件和jar文件的主要類。在A中我定義了一個JFrame,我添加了兩個JPanel:其中一個由JButton和JLabels組成,另一個是圖形化的,並且在B(B extends JPanel)中實現。立即更改JLabel

在B我有一個方法可能需要一段時間,所以我想給用戶有關進程的信息;即,我想告訴用戶剩下多少計算。我想通過更新A類中的JLabel來實現。但是,當我嘗試它時,我發現只有在方法完成後才更新JLabel,而不是看到它從0%運行到100%,我只看到100%,所有的時間。

我不認爲我有任何相關的代碼片段向您展示,但如果您想要我發佈某些內容,請告訴我。

我檢查了類似的問題,但在我看來,他們問的東西很不一樣。

謝謝,

Ron。

回答

5

你的問題是一個線程問題。您長期運行的過程將捆綁主要的Swing線程EDT,防止任何繪圖,組件更新或用戶交互。您需要在後臺線程(如由SwingWorker對象提供的線程)中執行長時間運行的進程。做到這一點,你的GUI將變得更加快速響應。

查看Concurrency in Swing瞭解更多關於這個重要主題的信息。

如果您需要更具體的幫助,您需要提供更多信息和代碼。

+0

非常豐富 - 看起來會解決我的問題。非常感謝! – ronash

+1

不客氣。你是Mandelbrot集合人,所以我不驚訝你需要使用後臺線程。您進入該集合的深度越深,所需的迭代次數越多,所需的數字精度就越高,因此計算的確需要很長時間。 –

+0

確切地說,我也認出了你! :-)感謝你我還會學習一些重要的技能。 – ronash