2013-06-24 112 views
0

我有一個下載程序顯示我的百分比,但後來我添加了一個JLabel,它不刷新。所以它保持在0%。現在我的問題是,我如何每秒更新一次JLabel?刷新JLabel百分比Java

loaderText = "Loading is at "+TextDownloader.percentage+"%.."; 
JLabel loaderLabel = new JLabel(loaderText, JLabel.CENTER); 
loaderLabel.setForeground(Color.WHITE); 
aJPanel.add(loaderLabel); 
+2

不要堵塞EDT(事件指派線程) - 的圖形用戶界面將「凍結」當這種情況發生。而是爲長時間運行的任務實施'SwingWorker'。有關更多詳細信息,請參見[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –

+1

還可以考慮使用['JProgressBar'](http://docs.oracle.com/javase/7/docs/api/javax/swing/JProgressBar.html)而不是'JLabel'或['ProgressMonitorInputStream'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/ProgressMonitorInputStream.html)而不是。 –

+0

顯示的代碼似乎也不斷添加標籤,但我認爲這只是針對該問題的代碼提取。 –

回答

0

使用java.swing.Timer類刷新圖形組件每秒:

final JLabel loaderLabel = new JLabel(JLabel.CENTER); 
loaderLabel.setForeground(Color.WHITE); 
aJPanel.add(loaderLabel); 

java.swing.Timer timer = new Timer(1000, new ActionListener(){ 
    String loaderText = "Loading is at "+TextDownloader.percentage+"%.."; 
    loaderLabel.setText(loaderText); 
};); 
timer.start(); 
+0

'TextDownloader'很可能阻止了EDT,所以這些代碼在結束之前都不會進行可視化更改。 –

+0

「最有可能」?你能給我一個鏈接到源?我從來沒有見過這樣的代碼。 – SeniorJD

+0

*「鏈接到源」*從上面的評論重複Bert。 *有關更多詳細信息,請參閱[併發中的Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。* –