作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
private void addSomeComponentsToFrame(){
JFrame frame = new JFrame();
.....
frame.setVisible(true);
frame.getContentPane().validate();
frame.getContentPane().repaint();
runOtherTask();
}
我想在 runOtherTask 方法启动之前查看框架对象及其组件,但是当我尝试运行 addSomeComponentsToFrame 方法时,框架出现(作为黑色矩形)但卡住,并且在 runOtherTask 方法完成后,它在屏幕上显示框架的组件。
最佳答案
when i try to run addSomeComponentsToFrame method, frame appears(as black rectangle) but freezes and after runOtherTask method completes it shows frame's components on screen.
听起来您正在阻止 Event Dispatch Thread
具有长时间运行的任务。
您可能希望将该任务从 EDT 卸载到单独的线程:
如果你在runOtherTask
中操作Swing组件,最好使用:
否则您可以使用(请注意,下面的代码不会在 GUI Event Dispatch Thread
中运行,因此不允许在其中操作 Swing 组件):
只是作为旁注,不需要:
frame.getContentPane().validate();
frame.getContentPane().repaint();
简单地说:
frame.validate();
frame.repaint();
此外,如果您的 Java 版本允许使用 revalidate()
而不是 validate()
。但只有在从可见容器中添加/删除组件时,这些才是必需的。
关于java - 如何在另一个进程开始之前绘制jrame组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14897066/
我是一名优秀的程序员,十分优秀!