单击时JButton卡住了(因为我在ActionListener中启动了递归函数)

时间:2019-01-13 08:39:59

标签: java loops jbutton actionlistener

我正在用Java做棋盘游戏,我想点击开始按钮开始游戏。主要功能是一个递归功能(游戏循环),我在ActionListener中调用该功能,当我单击按钮时,它就卡住了。

satisfy_property([], _).
satisfy_property([H|T], P) :-
    call(P, H),
    satisfy_property(T, P).

编辑:我使用了SwingWorker,它工作正常,谢谢您的帮助

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

@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();

        }

答案 1 :(得分:0)

这是一个完全错误的设计。

首先:actionPerformed()应该触发一些动作,但不要运行游戏循环。 actionPerformed()应该尽快返回:这并不意味着执行复杂的动作。理想情况下,将游戏循环放入自己的线程中,并以将动作传递到游戏循环然后立即返回的方式实现actionPerformed()

第二:游戏循环应该迭代实现,而不是作为递归函数。 (这就是为什么它首先被称为“游戏循环”的原因。)以递归的方式实现它是没有意义的,因为游戏循环往往会运行很长时间,并且递归的概念会消耗越来越多的堆栈内存,并且有时会失败-并且通常很快就会实现。

我建议您对软件进行彻底的重新设计。这样,JButton就不会有任何麻烦。