我有第一个JFrame,它工作正常。当我按下一个按钮时,它应该显示一个JProgressBar框架,但我得到空的JFrame。我用
打开它 p = new Progress("1/3");
p.setMax(2);
p.setProgress(0, "Getting bytes...");
任何人都知道为什么?
修改
我将解释更多细节(因为有人误解并以错误的方式纠正了我的帖子) - 在我的主课上我开始第一个JFrame:
new Crypt();
在Crypt类中,我已经注册了一个ActionListener按钮。点击它会打开第二个JFrame 但它是空的:
p = new Progress("1/3");
p.setMax(2);
p.setProgress(0, "Getting bytes...");
答案 0 :(得分:0)
在Crypt类中,我已经注册了一个ActionListener按钮。 OnClick它打开第二个JFrame但它是空的
从Swing侦听器调用的代码在Event Dispatch Thread (EDT)
上执行。 EDT负责绘制Swing组件。由于你的代码在EDT上执行一个长时间运行的任务,所以你要阻止Swing绘制组件,直到任务完成。
您需要为长时间运行的任务启动单独的线程。或者更好的是你应该使用SwingWorker
。阅读Concurrency in Swing上的Swing教程中的部分,它更详细地解释了这一点,并提供了SwingWorker的工作示例。