JProgressBar不会在循环内更新

斯皮卡特里克斯

我目前正在自学Java。我一直在尝试使用JRadioButtons,JcomboBoxes等不同的东西。现在,我正在尝试使用JProgressBars,但它似乎无法正常工作。

相关代码段:

JProgressBar progress;
JButton button;     //Fields of the class

progress=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
button=new JButton("Done");    //Done from methods

progress.setValue(0);
progress.setStringPainted(true);
progress.setBorderPainted(true);  //Also done from methods

button.addActionListener(this);   //Also done from methods

button被点击时,我想展示的JProgressBar去从0%到100%。这是方法的相关部分actionPerformed

public void actionPerformed(ActionEvent e)
{

        for(int i=0;i<=progress.getMaximum();i++)
        {
            progress.setValue(i);
            /*try{
                Thread.sleep(10);
            }catch(InterruptedException ex)
            {
                System.err.println("An error occured:"+ex);
                ex.printStackTrace();
            }*/
        }


        progress.setValue(progress.getMinimum());
}

我已经添加了两个progressbutton成一个JPanel和面板插入我用一个JFrame setVisible(true);

这里的问题是,每当我按下JButton时button,JProgressBarprogress都不会从0%变为100%。相反,什么也没有发生。如果取消注释该try...catch块,然后按button,该程序将“冻结”片刻,然后继续。这次也是,JProgressBar保持在0%,我再也看不到它在移动。我也曾尝试过一次repaint();try...catch但同样的事情发生了。

我尝试添加

System.out.println(i+"");

for循环中,actionPerformed并且在终端上打印此数字0到100。因此,我确定循环会运行。

我怎么解决这个问题?

mKorbel
  • 摆动是单线程的,

  • 所有更新都必须在EDT上完成,

  • 只需一会儿,即可在GUI中绘制当前EDT中的所有事件,

  • Thread.sleep要在EDT中锁定事件的执行,可以在for_loop的末尾绘制重绘,在执行完所有锁定之后Thread.sleep,Oracle跟踪中的更多内容-SwingEventDispatchThread中的并发性


从AWT(摇摆)监听输出- ActionListener应该做的,如果里面的所有事件actionPerformed被执行,那么只有执行progress.setValue(progress.getMinimum());,不要紧,如果是有Thread.sleep还是没有

public void actionPerformed(ActionEvent e) -> progress.setValue(progress.getMinimum());

  • 使用SwingWorkerRunnable#Threadprogress.setValue(i);包裹成invokeLater

  • 为了更好地帮助,尽早发布SSCCE/ MCVE,简短,可运行,可编译

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala:可变的HashMap不会在for循环内更新

来自分类Dev

Python更新列出错误!清单不会在while循环内更新

来自分类Dev

熊猫不会在循环内添加行

来自分类Dev

行不会在while循环内打印

来自分类Dev

循环永远不会在递归函数内完成

来自分类Dev

Angular不会在GMap对象内更新

来自分类Dev

PinView不会在循环中绘制

来自分类Dev

循环不会在R中执行

来自分类Dev

不会在for循环中打印x

来自分类Dev

ListView不会在拖放时更新

来自分类Dev

值不会在视图上更新

来自分类Dev

ListView不会在拖放时更新

来自分类Dev

角度循环广播不会在接收器中提供更新的值

来自分类Dev

倒数计时器不会在动态创建的元素内更新

来自分类Dev

Rails全局变量不会在更新时更新

来自分类Dev

matplotlib fill_between不会在颜色之间循环

来自分类Dev

Python进程不会在GTK循环退出时退出

来自分类Dev

JSON.parse不会在循环对象上出错

来自分类Dev

循环不会在列表python中增加

来自分类Dev

视频不会在Chrome中循环播放和搜索

来自分类Dev

画布不会在for循环后绘制矩形

来自分类Dev

Wallch不会在登录时自动循环使用背景

来自分类Dev

For循环不会在零索引处停止

来自分类Dev

Pygame屏幕不会在每个循环之前消失

来自分类Dev

Append不会在Python中“循环”我的搜索代码

来自分类Dev

break不会在while循环中中断。为什么?

来自分类Dev

Wallch不会在登录时自动循环使用背景

来自分类Dev

虽然循环不会在python中停止

来自分类Dev

DelayedExpansion变量不会在FOR循环中扩展