更新进度条

时间:2014-03-06 14:47:54

标签: java swing swingworker jprogressbar

我有一个需要通过GUI调用的大程序。 GUI有一个进度条,需要在用户按下开始按钮后更新(如5%.... 10%)。 问题是执行的后台任务没有固定的执行时间。所以在某种程度上可以测量在doInBackground()方法中执行的任务的进度(我正在尝试使用SwingWorker)。或者我应该选择一个不确定的进度条。 我无法清楚地理解Oracle教程页面上提供的示例,并且无法找到解释如何使用进度条的体面页面。 任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

根据问题,我会使用无限进度条

public class Indeterminate extends JProgressBar {

    private static final long serialVersionUID = -281761375041347893L;

    /***
     * initial the ProgressBar 
     */
    public IndeterminateProgressBar() {
        super();
        setIndeterminate(true);
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                setVisible(false);
            }
        });
    }

    /**
     * call this, if you start a long action
     */
    public void start() {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                setVisible(true);
            }
        });
    }

    /**
     * if you have finished, call this
     */
    public void end() {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                setVisible(false);
            }
        });
    }

}

像这样使用:

ActionListener startButtonListener = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        new Thread(new Runnable() {

            @Override
            public void run() {

                try {
                    progressBar.start();
                    // long operation

                } catch (Exception e) {
                    // handle excpetion
                } finally {
                    progressBar.end();

                }

            }
        }).start();

    }
};