gpt4 book ai didi

Java JFrame 卡住

转载 作者:行者123 更新时间:2023-12-02 05:10:28 25 4
gpt4 key购买 nike

我有一个使用 swing 的简单 java 应用程序。然而,当我执行程序时,框架将会出现,但我无法单击任何地方,并且按钮仅在几秒钟后出现。我对 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,请参阅 Creating UI in swing :

almost all code that creates or interacts with Swing components must run on the event dispatch thread

如果您需要阻塞直到创建 UI,您还可以使用 invokeAndWait

关于Java JFrame 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46500778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com