![](/img/trans.png)
[英]FlowControl in ActionListener method in Java When JButton Clicked
[英]JButton stuck when clicked (because i start recursive function in ActionListener)
我正在用java做一个棋盘游戏,我想制作一个开始按钮来开始游戏。 主函数是一个递归函数(gameloop),我在 ActionListener 中调用该函数,当我单击按钮时它会卡住。
ActionListener startListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gameFrame.remove(startB);
gameFrame.add(boardPanel, gbc);
gameFrame.revalidate();
Game.gameLoop(); //the main recursive function
}
};
编辑:我使用了 SwingWorker,效果很好,谢谢你的帮助
尝试这样的事情:
@Override
public void actionPerformed(ActionEvent e) {
gameFrame.remove(startB);
gameFrame.add(boardPanel, gbc);
gameFrame.revalidate();
new Thread(){
public void run(){
Game.gameLoop(); //the main recursive function
}
}.start();
}
这是一个完全错误的设计。
首先: actionPerformed()
应该触发一些动作,但永远不要运行游戏循环。 actionPerformed()
应该尽快返回:它并不意味着执行复杂的操作。 理想情况下,将游戏循环放入自己的线程中,并以将动作传递给游戏循环然后立即返回的方式实现actionPerformed()
。
第二:游戏循环应该迭代实现,而不是作为递归函数。 (这就是为什么它首先被称为“游戏循环”。)递归实现它是没有意义的,因为游戏循环往往会运行很长时间,并且递归概念会消耗越来越多的堆栈内存并且在某些时候会失败- 通常很快。
我建议对您的软件进行完全重新设计。 那么你就不会在JButton
遇到任何麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.