如何使用JProgressBar

3
我想要使用 JProgressBar ,并且它必须在一秒钟内加载完成。我不想等待任何任务完成,只是想在一秒钟内填满进度条。所以我写了下面的代码。但是它并没有起作用,进度条没有填充。我是Java新手,请问有谁能帮帮我?
    public void viewBar() {
progressbar.setStringPainted(true); progressbar.setValue(0); for(int i = 0; i <= 100; i++) { progressbar.setValue(i); try { Thread.sleep(10); } catch (InterruptedException ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); } } progressbar.setValue(progressbar.getMinimum()); }
1个回答

6
您不能在主要的Swing线程即“事件派发线程”上调用Thread.sleep(…),因为这样做只会让您的整个应用程序,包括进度条等,进入睡眠状态。可能您会看到1秒钟内没有任何事情发生,然后喜提完整的进度条。
我建议您使用Swing计时器来代替Thread.sleep,或者如果您想最终监控一个长时间运行的过程,请使用后台线程,例如SwingWorker。 SwingWorkers在JProgressBar教程中讨论。例如,使用计时器:
public void viewBar() {

  progressbar.setStringPainted(true);
  progressbar.setValue(0);

  int timerDelay = 10;
  new javax.swing.Timer(timerDelay , new ActionListener() {
     private int index = 0;
     private int maxIndex = 100;
     public void actionPerformed(ActionEvent e) {
        if (index < maxIndex) {
           progressbar.setValue(index);
           index++;
        } else {
           progressbar.setValue(maxIndex);
           ((javax.swing.Timer)e.getSource()).stop(); // stop the timer
        }
     }
  }).start();

  progressbar.setValue(progressbar.getMinimum());
}

1
非常感谢您的回答。因为有些人假装自己很聪明,但实际上一无所知。他们只知道如何降低声誉。再次感谢。 - Jayanga Kaushalya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接