gpt4 book ai didi

java - 从 JButton 调用方法会卡住 JFrame?

转载 作者:行者123 更新时间:2023-12-01 18:32:32 25 4
gpt4 key购买 nike

我正在为类(class)做一个基本的乒乓球游戏。我的 Pong 正在工作,并且在启动时有 GUI 显示,不幸的是我似乎无法从启动 JButton 开始游戏。我已经评论了代码中的问题所在,并删除了不相关的代码。

 frame.add(GUIPanel);
JButton startButton = new JButton("Start!");
GUIPanel.add(startButton, BorderLayout.CENTER);
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
frame.getContentPane().remove(GUIPanel);
frame.validate();
frame.repaint();

drawPanel = new DrawPanel();
drawPanel.requestFocus();
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
//This is the part that freezes it, everything else works fine
//except that the playGame method isn't called. If I remove the whole
//startButton and whatnot I can call playGame and it works perfectly.
playGame();
}
});
}

有什么想法吗?

最佳答案

Swing 是一个单线程框架。

也就是说,对 UI 的所有交互和修改都将在事件调度线程的上下文中进行。任何阻塞该线程的事情都会阻止它处理重绘请求和用户输入/交互等。

我的猜测是 playGame 正在使用诸如 Thread.sleep 或某种 while(true) 之类的东西,并且阻塞了 EDT,导致您的程序看起来好像被卡住了

通读一下Concurrency in Swing了解更多详情。

一个简单的解决方案是使用 Swing Timer充当你的游戏循环。每次滴答时,您都会更新游戏的状态并在游戏组件上调用(类似)repaint

关于java - 从 JButton 调用方法会卡住 JFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508354/

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