如何将swingworker用于jprogressbar <update> </update>

时间:2014-07-16 15:43:14

标签: java swing swingworker

我有一个代表jProgressbar的swingworker。这是代码

private Swingworker timeOfProccess;

class Swingworker extends SwingWorker<Object, Object> {

    @Override
    protected Object doInBackground() throws Exception {

        jProgressBar1.setStringPainted(true);
        int progress = 0;
        setProgress(0);

        while (progress <= 100) {
            jProgressBar1.setValue(progress);
            Thread.sleep(5);
            progress++;
        }
        mainProccess();
        return null;
    }

    @Override
    protected void done() {
        jProgressBar1.setValue(100);
        JOptionPane.showMessageDialog(null, "Proses Selesai");
        jProgressBar1.setValue(0);
        jProgressBar1.setStringPainted(false);
    }

}

private void btnExecuteActionPerformed(java.awt.event.ActionEvent evt) {                                           

    timeOfProccess = new Swingworker();
    timeOfProccess.execute();}

我不知道,为什么进度条运行不受控制。即使这个过程仍然有效,它仍然快到100%。但无效完成是在主进程结束后弹出JoptionPane的成功。我在代码中迷失了哪里。感谢..

1 个答案:

答案 0 :(得分:0)

访问How to Use Progress Bars您可以在其中找到有关进度条的详细示例以及详细说明。

请不要使用Thread.sleep()来暂停整个swing应用程序,而是尝试使用最适合swing应用程序的Swing Timer

了解更多How to Use Swing Timers

示例代码:

// delay for 1500 mill-seconds
Timer timer = new javax.swing.Timer(1500, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // call for your next task
    }
});
timer.setRepeats(true); // you can turn off the repetition
timer.start();

  

如何让进度条显示数字1 - 100%。

使用JProgressBar#setStringPainted()方法显示完成状态百分比。

enter image description here