仅在方法期间激活JProgressBar

时间:2012-05-27 22:17:40

标签: java swing progress-bar jprogressbar

我在使用JProgressBar时遇到了麻烦。我有一个可能需要一些时间的函数,我想在执行函数时在不确定模式上有一个进度条。我有一个激活此功能的按钮,我在调用函数之前尝试setIndeterminate(true),然后setIndeterminate(false),但我没有随时移动进度条。< / p>

我有这段代码:

        progBar.setIndeterminate(true);
        //delay(12);
        //this.setEnabled(false);
        Executor executor = java.util.concurrent.Executors.newSingleThreadExecutor();
        executor.execute(new Runnable() {@Override
            public void run() {
                    function1();

            }});

        //progBar.setIndeterminate(false);
        //progBar.setVisible(false);
        System.out.println("End Function");
        //-........................
    }

在没有任何新执行人的情况下尝试了function1()。如果我不对行setIndeterminate(false)发表评论,则进度条不会启动,但如果我对其进行评论,则它始终处于不确定模式。

请注意,我正在使用Netbeans IDE设计一些GUI,但我自己编写了大部分内容(仅使用NetBeans GUI进行定位)。

1 个答案:

答案 0 :(得分:1)

您应该移动此代码:

progBar.setIndeterminate(false);
progBar.setVisible(false);
调用SwingUtilities.invokeLater()

进入function1()块。

现在它的设置方式会在setIndeterminate(true)调用后立即执行 - execute()方法不会阻止。

例如:

executor.execute(new Runnable() {
        @Override
        public void run() {
                function1();
                // now fix the progress bar
                SwingUtilities.invokeLater(new Runnable() {
                    progBar.setIndeterminate(false);
                    progBar.setVisible(false);
                });
        }});