Java JFrame冻结
我有使用swing的这个简单的java应用程序。然而,当我执行程序的时候,框架会出现,但我不能在任何地方点击,而按钮只会在几秒钟后出现。我对javas Swing库非常陌生,所以我可能会错过一些东西,但是从我读过的代码中不应该引起任何问题。Java JFrame冻结
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.FlowLayout;
import javax.swing.*;
public class Game {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame Example");
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
JLabel label = new JLabel("This is a label!");
JButton button = new JButton();
button.setText("Press me");
panel.add(label);
panel.add(button);
frame.add(panel);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
编辑 所以我重新安装了JDK,但发现这样的:如果我的浏览器运行时,我执行上面的代码将挂起和冻结,但是如果我关闭浏览器,它运行正常。但是我不能启动我的浏览器,直到我杀了我的应用程序,所以看起来我的安装有问题,因为它们不应该使用相同的资源?
编辑 解决我的问题:有JDK的多个版本和JRE安装这样既解除停止,然后安装最新版本,一切似乎是工作!
您需要创建UI用户界面下分派线程:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// code to create UI or call to function that creates the UI
}
});
的Java 8风格:
SwingUtilities.invokeLater(()->{
// Your UI code
});
如果不使用成语则UI不能部分在不一致的状态下创建,请参阅Creating UI in swing:
几乎所有的c创建或与Swing组件交互必须 事件调度线程
上运行,你也可以使用invokeAndWait
ODE是你需要阻塞,直到UI创建。
downvoting需要一些解释。 –
除了回答一个漂亮的副本,这不能回答这个问题。他的代码适合我。你在概括,甚至没有意识到实际的问题。 –
我不会downvote,即使这是推荐的方式,这个例子在这里运行没有任何问题 – PeterMmm
Java版本,操作系统,CPU,RAM? – PeterMmm
我在Windows 10,i5-6600k和16GB内存上使用java 8。但是我刚刚意识到,即使在打开“关于Java”应用程序时也是如此,所以看起来我的问题与java相关,而不是这个特定的代码。 – tiggybits
应该像你一样工作。我很好奇你的框架实际上是冻结还是仅仅在窗口大小调整后出现。 – Antoniossss