【发布时间】:2012-12-15 08:24:28
【问题描述】:
可能重复:
Java GUI JProgressBar not painting
Can a progress bar be used in a class outside main?
我正在使用 Netbeans 拖放来做一个应用程序。我将从用户那里获得输入并使用输入来运行我的算法。该算法将需要不同的时间来运行,然后在新的帧中显示其结果。在等待算法运行时,我希望添加一个进度条。 当用户单击按钮提交输入时,我添加了以下代码。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
final JProgressBar bar = new JProgressBar(0,250000);
bar.setValue(1000);
bar.setIndeterminate(false);
JOptionPane jO = new JOptionPane(bar);
Thread th = new Thread(){
public void run(){
for(int i = 1000 ; i < 250000 ; i+=10000){
bar.setValue(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
};
th.start();
final JDialog dialog = jO.createDialog(jO,"Experiment X");
dialog.pack();
dialog.setVisible(true);
//Algorithm goes here
进度条确实显示并运行。但是当进度条值更新到最后时,只有我的算法运行。我看过别人的例子,但我不太明白它是如何工作的。
谁能告诉我哪里出错了?
【问题讨论】:
-
这个问题已经被问过很多次了。使用 SwingWorker 提供的后台线程。请阅读进度条和 swingworker 教程,了解更多相关信息,Google 将帮助您找到。
-
"..然后在新框架中显示其结果。" 请参阅The Use of Multiple JFrames, Good/Bad Practice? 了解评估(差)和替代方案(很多)。
标签: java swing jprogressbar