进度条每100秒增加1

Mat*_*hry 1 java swing

我试图让JProgressBar每100秒每秒增加1,而目前我正在使用Thread.sleep(100)while语句,如下所示:

    try {
         while (i<=100){
            doTime();

         }
    } catch (InterruptedException ex) {
        Logger.getLogger(SplashScreen.class.getName()).log(Level.SEVERE, null, ex);
    }

public void doTime() throws InterruptedException{


        jLabel1.setText("sleeping");
        Thread.sleep(100);
        jLabel1.setText("start");
        i++;
        pb.setValue(i);
        pb.repaint();

}
Run Code Online (Sandbox Code Playgroud)

如果我通过System.out.println实时显示它进行调试但是摇摆GUI冻结,直到它退出while循环可以有人帮忙吗?

谢谢

亚光

jal*_*aba 5

正如派生所说,你应该使用SwingWorker.从它的javadoc:

"SwingWorker专为需要在后台线程中运行长时间运行任务并在完成或处理时提供UI更新的情况而设计.SwingWorker的子类必须实现doInBackground()方法来执行后台计算. "

通过java教程中对ProgressBarDemo.java的这一细微更改,您几乎可以得到您想要的内容.

    public Void doInBackground() {
        Random random = new Random();
        int progress = 0;
        //Initialize progress property.
        setProgress(0);
        while (progress < 100) {
            //Sleep for up to one second.
            try {
                //original code: Thread.sleep(random.nextInt(1000));
                Thread.sleep(10);
            } catch (InterruptedException ignore) {}
            //Make random progress.
            //originalcode: progress += random.nextInt(10);
            progress++;
            setProgress(Math.min(progress, 100));
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)