Java 如何使用JProgressBar

Java 如何使用JProgressBar,java,swing,jprogressbar,concurrency,Java,Swing,Jprogressbar,Concurrency,我想使用JProgressBar,它必须在一秒钟内加载。我不想等待任何任务完成。只想在一秒钟内填满进度条。所以我写了下面的代码。但它不起作用。进度条没有填充。我是Java新手。谁能帮我一下吗。 public void viewBar(){ progressbar.SetStringPaint(真); progressbar.setValue(0); 对于(int i=0;i您不能在主Swing线程、EDT或“事件调度线程”上调用Thread.sleep(…),因为这只会使您的整个应用程序、进度

我想使用
JProgressBar
,它必须在一秒钟内加载。我不想等待任何任务完成。只想在一秒钟内填满进度条。所以我写了下面的代码。但它不起作用。进度条没有填充。我是Java新手。谁能帮我一下吗。

public void viewBar(){
progressbar.SetStringPaint(真); progressbar.setValue(0);
对于(int i=0;i您不能在主Swing线程、EDT或“事件调度线程”上调用Thread.sleep(…),因为这只会使您的整个应用程序、进度条和所有程序进入睡眠状态。很可能您在1秒内没有看到任何事情发生,然后宾果,整个进度条都被填满了

我建议您对此部分使用Swing计时器,而不是Thread.sleep,或者如果您希望最终监视长时间运行的进程,请使用后台线程,例如SwingWorker。SwingWorker将在JProgressBar教程中讨论

e、 例如,使用计时器:

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());
}
public void viewBar(){
progressbar.SetStringPaint(真);
progressbar.setValue(0);
int timerDelay=10;
新的javax.swing.Timer(timerDelay,新的ActionListener(){
私有整数指数=0;
私有int maxIndex=100;
已执行的公共无效操作(操作事件e){
如果(索引<最大索引){
progressbar.setValue(索引);
索引++;
}否则{
progressbar.setValue(maxIndex);
((javax.swing.Timer)e.getSource()).stop();//停止计时器
}
}
}).start();
progressbar.setValue(progressbar.getMinimum());
}

非常感谢您的回答。因为有些人假装是天才,但什么都不知道。他们只知道如何降低声誉。再次感谢。
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());
}