【发布时间】:2011-12-25 19:21:45
【问题描述】:
我已经编写了两台计算机在黑白棋中相互播放,但是当它们相互播放时。棋盘仅在游戏结束后更新。
通过一些谷歌搜索,我知道它与 AWT 事件线程有关,但我仍然不知道如何强制 JFrame 刷新。
我的函数通过更改图标然后调用重新验证和重新绘制来工作。 任何指针都会很棒。
【问题讨论】:
-
当你玩你的程序时它是否正确显示?如果是这样,您是否尝试过模拟单击事件而不是刷新图形,以使其就像计算机在板上单击一样?
-
嗯,我没想到。但我不知道它是否会起作用。 GUI 由称为
updateBoard()的单独方法更新,该方法根据内部表示更改板。虽然与 while 循环有关意味着它在结束之前不会更新 -
所以您没有使用模型-视图-控制器模式来实现您的 GUI?您的应用程序如何等待用户响应?它是使用循环还是事件完成的?由于 CPU 负载过重,您的应用程序 GUI 可能会被冻结,这就是为什么它在计算结束时没有更新的原因。如果你让下一个玩家暂停几秒钟会发生什么?如果 GUI 得到正确更新,那么我上面的假设应该是正确的。
-
不,不幸的是它不是 MVC。这是我完成的第一个 GUI,当我了解 MVC 时,我已经基本完成了。该游戏确实适用于拥有 1 个或更多用户,但是当它的 AI 非常糟糕时它不会更新,可能是因为没有暂停。它有一段时间(gameNotOver)......
-
所以尝试让线程在该循环内休眠。
标签: java multithreading swing events refresh