gpt4 book ai didi

java - 我的套接字 API 中的读取功能不起作用并且滞后

转载 作者:行者123 更新时间:2023-12-02 09:15:11 25 4
gpt4 key购买 nike

据我所知,我制作了一款单模式国际象棋游戏,没有任何错误,并且我开始了多人游戏模式。当我成功连接两个玩家后,一个窗口(服务器玩家窗口)可以工作,但对手窗口滞后于特定行“movement = OpportunityPlayer.in.readLine();”,它没有显示错误或任何事情,事实上它阻止窗口响应而不显示任何进度,如图 here

代码:

private void receiveMovement() throws IOException {

System.out.println("I Entered receiveMovement");
String movement = null;
if (serverPlayer != null) {
System.out.println("I Entered serverPlayer");
movement = serverPlayer.in.readLine();
board.whiteTurn = movement.charAt(4) == 1;
} else if (opponentPlayer != null) {
System.out.println("I Entered opponentPlayer");
movement = opponentPlayer.in.readLine();
board.whiteTurn = movement.charAt(4) == 1;
}
System.out.println(movement);
// int yAxis1 = movement.charAt(0) -'a';
// int yAxis2 = movement.charAt(2) -'a';
// System.out.println(yAxis1);
// System.out.println(yAxis2);
// Coordinate sourceCoordinate = new Coordinate(movement.charAt(1), yAxis1); //not sure of the order
// Coordinate destinationCoordinate = new Coordinate(movement.charAt(3), yAxis2);
assert movement != null;
Coordinate sourceCoordinate = new Coordinate(movement.charAt(1), movement.charAt(0) - 'a');
Coordinate destinationCoordinate = new Coordinate(movement.charAt(3), movement.charAt(2) - 'a');
sourceTile = board.getTile(sourceCoordinate);
destinationTile = board.getTile(destinationCoordinate);
}

系统消息:

I Entered play Successfully
I Entered opponent play, i'm stuck
I Entered receiveMovement
I Entered opponentPlayer

Process finished with exit code -1

最佳答案

输入流中的 read 方法是阻塞调用(如解释的 in the api )。因此,您的程序将始终在到达 readLine() 方法时等待输入。如果从 gui 调用此方法,它将停止 gui 并卡住。

解决方案是在另一个 thread 中执行代码所以主线程不会被阻塞。在线程中接收到数据后,您可以通知 gui 或任何其他类有新的移动(或任何其他数据)可用。

关于java - 我的套接字 API 中的读取功能不起作用并且滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59050183/

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