【问题标题】:How to use JProgressBar如何使用 JProgressBar
【发布时间】:2011-09-13 14:42:00
【问题描述】:

我想使用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()); }

【问题讨论】:

    标签: java swing jprogressbar concurrency


    【解决方案1】:

    您不能在主 Swing 线程、EDT 或“事件调度线程”上调用 Thread.sleep(...),因为这只会让您的整个应用程序、进度条和所有内容进入睡眠状态。很可能你在 1 秒内什么都没看到,然后宾果游戏,整个进度条都被填满了。

    我建议你在这部分使用 Swing Timer 而不是 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());
    }
    

    【讨论】:

    • 非常感谢您的回答。因为有些人假装天才,却一无所知。他们只知道如何降低声誉而已。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多