如何在另一个进程启动之前绘制jframe组件

时间:2013-02-15 14:40:49

标签: java multithreading swing jframe

private void addSomeComponentsToFrame(){
JFrame frame = new JFrame();
.....
frame.setVisible(true);

frame.getContentPane().validate();
frame.getContentPane().repaint();

runOtherTask();
}

我希望在runOtherTask方法启动之前看到框架对象及其组件,但是当我尝试运行addSomeComponentsToFrame方法时,框架出现(作为黑色矩形)但冻结,并且在runOtherTask方法完成后,它会在屏幕上显示框架的组件。

1 个答案:

答案 0 :(得分:3)

  

当我尝试运行addSomeComponentsToFrame方法时,框架出现(如   黑色矩形)但冻结并在runOtherTask方法完成后   它在屏幕上显示框架的组件。

听起来你正在阻止Event Dispatch Thread长时间运行的任务。

您可能希望将该任务从EDT卸载到单独的线程

如果您更好地使用runOtherTask中的Swing组件:

否则你可以使用(注意下面没有在GUI Event Dispatch Thread中运行,因此不允许在其中操作Swing组件):

正如旁注不需要:

frame.getContentPane().validate();
frame.getContentPane().repaint();

简单地:

frame.validate();
frame.repaint();

此外,如果您的Java版本允许使用revalidate()而不是validate()。但是,只有在可见容器中添加/删除组件时才需要这些。