为什么第二个JFrame不显示组件?

时间:2014-08-01 11:00:56

标签: java swing jframe jprogressbar

我有第一个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...");

The Progress class Screen shot

1 个答案:

答案 0 :(得分:0)

  

在Crypt类中,我已经注册了一个ActionListener按钮。 OnClick它打开第二个JFrame但它是空的

从Swing侦听器调用的代码在Event Dispatch Thread (EDT)上执行。 EDT负责绘制Swing组件。由于你的代码在EDT上执行一个长时间运行的任务,所以你要阻止Swing绘制组件,直到任务完成。

您需要为长时间运行的任务启动单独的线程。或者更好的是你应该使用SwingWorker。阅读Concurrency in Swing上的Swing教程中的部分,它更详细地解释了这一点,并提供了SwingWorker的工作示例。