我有一个代表jProgressbar的swingworker。这是代码
private Swingworker timeOfProccess;
class Swingworker extends SwingWorker<Object, Object> {
@Override
protected Object doInBackground() throws Exception {
jProgressBar1.setStringPainted(true);
int progress = 0;
setProgress(0);
while (progress <= 100) {
jProgressBar1.setValue(progress);
Thread.sleep(5);
progress++;
}
mainProccess();
return null;
}
@Override
protected void done() {
jProgressBar1.setValue(100);
JOptionPane.showMessageDialog(null, "Proses Selesai");
jProgressBar1.setValue(0);
jProgressBar1.setStringPainted(false);
}
}
private void btnExecuteActionPerformed(java.awt.event.ActionEvent evt) {
timeOfProccess = new Swingworker();
timeOfProccess.execute();}
我不知道,为什么进度条运行不受控制。即使这个过程仍然有效,它仍然快到100%。但无效完成是在主进程结束后弹出JoptionPane的成功。我在代码中迷失了哪里。感谢..
答案 0 :(得分:0)
访问How to Use Progress Bars您可以在其中找到有关进度条的详细示例以及详细说明。
请不要使用Thread.sleep()
来暂停整个swing应用程序,而是尝试使用最适合swing应用程序的Swing Timer。
示例代码:
// delay for 1500 mill-seconds
Timer timer = new javax.swing.Timer(1500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// call for your next task
}
});
timer.setRepeats(true); // you can turn off the repetition
timer.start();
如何让进度条显示数字1 - 100%。
使用JProgressBar#setStringPainted()方法显示完成状态百分比。