好的,我已经在网上阅读了一个搜索过的内容,但我还没有找到问题的解决方案,也许我错过了一些简单的东西,因此我在这里......
我有一个相当大的项目,处理维修业务的工单.这是所有数据库连接,许多页面的代码和类.但我只是在前端添加了一小段代码,实质上是在我们的笔记区域中检查新消息.
无论如何,我显示一个带有两个JLabel的简单JFrame,而一个单独的线程查询数据库.这一切都发生在程序的开始.问题是我的小"请等待" JFrame提出了它的框架,但没有胆量,没有背景,没有JLabel,在等待期间(这是程序加载的其余部分,而不是数据库线程),显示后,但到那时它错过了它的观点.
我写了以下示例程序.它显示一个简单的JFrame(CheckingMessagesGUI:一个带有两个JLabel的JFrame,仅此而已)休眠5秒然后显示Example(主程序)JFrame,然后立即关闭()在这个例子中,当然我真正的程序继续做多很多.我发现这似乎是导致问题的原因.一旦睡眠定时器用完,窗口就会显示,但显示它的代码是在命令之前给出的,应该按照那个顺序完成吗?System.exit(0)invokeLaterThread.sleep
我的问题是为什么invokeLater导致我的JFrame无法正确显示?
我的理解是,目的invokeLater是让项目在正确的AWT事件线程上运行,这会让我觉得这个窗口会被正确绘制.无论如何,我确定我错过了一些明显的东西.我invokeLater在下面的代码中注释了该部分,并且它正确运行,如果你把它放回去它不...
提前谢谢了.
package javaapplication6;
public class Example extends javax.swing.JFrame {
public Example() {
System.out.println("Example started");
setBounds(100,100,200,200);
System.out.println("cmGUI instantiated");
CheckingMessagesGUI cmGUI = new CheckingMessagesGUI();
System.out.println("Set cmGUI visible");
cmGUI.setVisible(true);
cmGUI.validate();
try {
System.out.println("timer started");
Thread.sleep(5000);
System.out.println("timer done");
} catch(InterruptedException e){
}
System.exit(0);
}
public static void main(String[] args) {
/*java.awt.EventQueue.invokeLater(new …Run Code Online (Sandbox Code Playgroud)