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

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

runOtherTask();
}

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

4

1 回答 1

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(). 但这些只有在从可见容器中添加/删除组件时才需要。

于 2013-02-15T14:43:50.817 回答