【问题标题】:Activate JProgressBar only during a method仅在方法期间激活 JProgressBar
【发布时间】:2012-05-27 22:17:39
【问题描述】:

我在使用 JProgressBar 时遇到问题。我有一个可能需要一些时间的功能,并且我想要在执行该功能时处于不确定模式的进度条。我有一个激活此功能的按钮,我在调用该功能之前尝试setIndeterminate(true),之后尝试setIndeterminate(false),但我没有让进度条在任何时候移动。

我有这个代码:

        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 进行定位)。

【问题讨论】:

  • 不要阻塞 EDT(事件调度线程)——当这种情况发生时,GUI 将“冻结”。为重复任务实现一个 Swing Timer 或为长时间运行的任务实现一个 SwingWorker。有关详细信息,请参阅Concurrency in Swing

标签: java swing progress-bar jprogressbar


【解决方案1】:

您可能应该移动此代码:

progBar.setIndeterminate(false);
progBar.setVisible(false);

在调用function1() 后进入SwingUtilities.invokeLater() 块。

它现在的设置方式将在 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);
                });
        }});

【讨论】:

  • 好的,它对我有用。好吧, setIntermediate(false) 在函数结束之前执行了一点,但不是问题。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多