Java 未显示Jframe内容
当用户单击我的应用程序中的某个特定按钮时,我试图在新的JFrame中显示加载图像。JFrame会显示,但不会显示任何内容!,也有白色背景,而所有的JFrames都有灰色的默认背景。这里怎么了Java 未显示Jframe内容,java,swing,jframe,Java,Swing,Jframe,当用户单击我的应用程序中的某个特定按钮时,我试图在新的JFrame中显示加载图像。JFrame会显示,但不会显示任何内容!,也有白色背景,而所有的JFrames都有灰色的默认背景。这里怎么了 stop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { analyzer.running=false; JFra
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
analyzer.running=false;
JFrame Load1=new JFrame("Load1");
ImageIcon icon1=new ImageIcon("./ajax-loader.gif");
System.out.println(icon1.getIconHeight());
Load1.add(new JLabel("Retrieving...", icon1, JLabel.CENTER),BorderLayout.CENTER);
Load1.pack();
Load1.setSize(400,400);
Load1.setVisible(true);
System.out.println("Start Processing");
parser.parse(); // Time Consuming method
nw_Creator.create();
System.out.println("End Processing");
Load1.setVisible(false);
home.setVisible(false);
screen2.setVisible(true);
}
});
不要将耗时的部分放在事件处理程序或事件分派线程中运行的任何方法中。您可能希望改用。不要将耗时的部分放在事件处理程序或事件分派线程中运行的任何方法中。您可能想改用。发生的事情是,您永远不会释放UI线程,因此您的JFrame永远不会被绘制。由于所有图形操作都是在UI线程上完成的,因此如果希望jframe显示任何内容,必须释放它,进行计算,然后关闭框架 现在发生的事情是,您永远不会释放UI线程,因此您的JFrame永远不会被绘制。由于所有图形操作都是在UI线程上完成的,因此如果希望jframe显示任何内容,必须释放它,进行计算,然后关闭框架 我没有看到有问题的JFrame中添加icon1?很抱歉,我刚刚粘贴了相关代码。错误地错过了那一行。这不是您问题的答案,但我注意到您同时调用了pack和setSize。调用这两种方法是不合适的。调用pack或setSize,但不能同时调用两者。pack方法将根据内容设置大小。很少有情况下无法确定内容的大小,在这种情况下,您会删除对pack和call setSize的调用。我没有看到icon1被添加到相关的JFrame中?很抱歉,我只是粘贴了相关代码。错误地错过了那一行。这不是您问题的答案,但我注意到您同时调用了pack和setSize。调用这两种方法是不合适的。调用pack或setSize,但不能同时调用两者。pack方法将根据内容设置大小。很少有情况下无法确定内容的大小,在这种情况下,您会删除对打包的调用并显式调用setSize。您能告诉我这里发生了什么吗?JFrame是在CPU密集型任务之前绘制的,所以应该显示出来,对吗?@nikel不幸的是,事件调度是一项相当复杂的任务。尽管您的代码看起来正确,方法的顺序正确,但绘制帧和触发动作的处理方式却截然不同。setVisible或其他方法本身正在创建事件,并将它们排入事件队列。只有在一个事件(在本例中为操作侦听器处理)完成后,才会启动下一个事件。简而言之,JFrame不是在CPU密集型任务之前绘制的,而是在CPU密集型任务之后绘制的。+1表示SwingWorker。另请参见此相关内容。您能告诉我这里发生了什么吗?JFrame在CPU密集型任务之前绘制,因此应该显示出来,对吗?@nikel不幸的是,事件调度是一项相当复杂的任务。尽管您的代码看起来正确,方法的顺序正确,但绘制帧和触发动作的处理方式却截然不同。setVisible或其他方法本身正在创建事件,并将它们排入事件队列。只有在一个事件(在本例中为操作侦听器处理)完成后,才会启动下一个事件。简而言之,JFrame不是在CPU密集型任务之前绘制的,而是在CPU密集型任务之后绘制的。+1表示SwingWorker。请看这篇相关文章。你能再详细一点吗?你能再详细一点吗?