gpt4 book ai didi

java - 函数调用阻止 GUI 在 Java 中更新

转载 作者:行者123 更新时间:2023-11-29 08:34:38 25 4
gpt4 key购买 nike

我目前正在使用 AI 游戏算法在 java 中实现一个 quoridor 游戏。 “人”点击移动后,GUI 需要更新,AI 开始思考。我在面板里面有这样的东西:

public void mouseClicked(MouseEvent e)
{
gameBoard.executeMove( movePawn );
repaint();
gameboard.callAi();
}

在我调用函数 callAi() 之后,我进入了一个循环,该循环耗费了太多时间才能完成。另一方面,gui 卡住,它不更新,甚至认为在 AI“开始思考”之前调用重绘方法。我试图在调用 AI 之前延迟,但它不起作用。我写了这个:

try
{ TimeUnit.MILLISECONDS.sleep(5);}
catch{}

我该怎么做才能解决这个问题?可能和线程有关系,但是我对Java中的线程不是太友好。

最佳答案

我强烈建议您阅读一下 EDT(事件调度线程)是什么。

Java Event-Dispatching Thread explanation

其中一个答案很好地解释了它。快速 TLDR:基本上,GUI 卡住的原因之一是因为您在 EDT 中包含的 AI 方法(我不能肯定地说 gameBoard.executeMove(...) 方法)。 EDT 用于更新 GUI,而不是运行需要大量计算时间的方法。

将游戏逻辑代码从 GUI 中取出并放入主线程/新线程(而不是 EDT)。如果您确实需要 EDT 中的游戏逻辑,则在 EDT 中创建一个新线程,让它进行游戏计算,最后使用 Swing.Utilties.invokeLater(...) 方法更新 GUI。

Maybe it has something to do with threads , but I am not too friendly with threads in Java.

在制作游戏时一定要熟悉线程,尤其是 EDT。

关于java - 函数调用阻止 GUI 在 Java 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45069984/

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