繁体   English   中英

Java JFrame冻结

[英]Java JFrame freezing

我有这个简单的java应用程序使用swing。 但是,当我执行程序时,框架将出现,但我无法在任何地方单击,按钮仅在几秒钟后出现。 我是javas Swing库的新手,所以我可能会遗漏一些东西,但是从我读过的这段代码不应该引起任何问题。

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调度线程下创建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 ,请参阅在swing中创建UI

几乎所有创建Swing组件或与Swing组件交互的代码都必须在事件派发线程上运行

你也可以使用invokeAndWait ,你需要阻止,直到创建UI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM