Java/Chess 奇怪的 Gui Bug
Java/Chess Odd Gui Bug
所以我完全不知道为什么这不起作用——但是 GUI 不响应 getMove(GameState gameState)
方法中的任何内容。
即使在我移动后通过睡眠暂停它——它也没有显示任何内容。任何帮助都会很棒。我迷路了。
public class Engine extends Player {
private GameState copy;
public Engine(Color color, Direction direction) {
super(color, direction);
}
public Move getMove(GameState gameState) {
gameState.executeMove(new Move(4, 6, 4, 4));
try {
TimeUnit.SECONDS.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
return new Move(5, 6, 5, 4);
}
}
您在 Swing GUI 的事件线程上调用 sleep
,这会阻塞事件线程,阻止它执行必要的活动,例如绘制 GUI 和与用户交互,并且这将使 GUI 进入睡眠状态,使其无响应。解决方案是永远不要这样做,而是使用 Swing Timer 代替。
附带问题:在覆盖方法的第一行添加对 super.paintComponent(g);
方法的调用。这将允许您的 JPanel 进行内务处理。
所以我完全不知道为什么这不起作用——但是 GUI 不响应 getMove(GameState gameState)
方法中的任何内容。
即使在我移动后通过睡眠暂停它——它也没有显示任何内容。任何帮助都会很棒。我迷路了。
public class Engine extends Player {
private GameState copy;
public Engine(Color color, Direction direction) {
super(color, direction);
}
public Move getMove(GameState gameState) {
gameState.executeMove(new Move(4, 6, 4, 4));
try {
TimeUnit.SECONDS.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
return new Move(5, 6, 5, 4);
}
}
您在 Swing GUI 的事件线程上调用 sleep
,这会阻塞事件线程,阻止它执行必要的活动,例如绘制 GUI 和与用户交互,并且这将使 GUI 进入睡眠状态,使其无响应。解决方案是永远不要这样做,而是使用 Swing Timer 代替。
附带问题:在覆盖方法的第一行添加对 super.paintComponent(g);
方法的调用。这将允许您的 JPanel 进行内务处理。