进度栏的值实际上已更新。但这还不只是在屏幕上。通常,我们在循环中使用进度条。但是,当您处于循环中时,您可能 该循环,但该循环没有被绘制。为什么?因为您通过单击按钮来调用它。当您单击一个按钮时,您为该按钮编写的所有代码都将由来执行AWTEventThread
。这是跟踪所有Swing组件并检查是否需要重新绘制的同一线程。那就是使您的JFrame活跃起来的线程。当您将鼠标悬停在某个按钮上并且颜色发生一些变化时,该操作由来完成AWTEventThread
。
因此,在循环中工作时,AWTEventThread无法再更新屏幕。
这意味着有两种解决方案:
(推荐)您应该创建一个单独的线程来执行循环。这意味着AWTEventThread可以根据需要更新屏幕(调用时bar.setValue(...);
)
public void yourButtonClickMethod()
{ Runnable runner = new Runnable() { public void run() { //Your original code with the loop here. } }; Thread t = new Thread(runner, “Code Executer”); t.start(); }
手动重新绘制进度条。我一直都这样做,bar.repaint();
但是我想知道它是否会起作用。我就是那个方法。如果不行,请尝试:bar.update(bar.getGraphics());
。