这是一个小例子:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int x = 0;
while (jProgressBar1.getValue() < 100) {
try {
Thread.sleep(50);
x++;
jProgressBar1.setValue(x);
jProgressBar1.repaint();
} catch (InterruptedException ex) {
Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(jProgressBar1.getValue());
}
}
System.out.println(jProgressBar1.getValue());
将数字返回到 IDE 输出,但 jProgressBar1 不绘制该值。这段代码有什么问题?请帮忙。
最佳答案
切勿在 Swing 线程中使用 Thread.sleep()。请改用 javax.swing.Timer。
示例:
private void jButton1ActionPerformed(ActionEvent evt) {
final Timer t = new Timer(50, new ActionListener() {
public void actionPerformed(ActionEvent e) {
jProgressBar1.setValue(jProgressBar1.getValue() + 1);
if (jProgressBar1.getValue() == 100) {
((Timer) e.getSource()).stop();
}
}
});
t.start();
}
关于java - 带线程的进度条 (Java Swing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646236/