Jay*_*lya 3 java concurrency swing jprogressbar
我想使用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());
    }
    你不能在主Swing线程,EDT或"事件调度线程"上调用Thread.sleep(...),因为除了把整个应用程序,进度条和所有内容都放在休眠状态之外什么都不做.可能你没有看到任何事情发生1秒钟然后宾果游戏,整个进度条都被填满了.
我建议您使用Swing Timer代替Thread.sleep,否则如果您想最终监视长时间运行的进程,请使用后台线程,例如SwingWorker.SwrogWorkers在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());
}
| 归档时间: | 
 | 
| 查看次数: | 8743 次 | 
| 最近记录: |