gpt4 book ai didi

Java - 创建单独的线程用于通过互联网发送对象

转载 作者:行者123 更新时间:2023-12-02 09:43:46 26 4
gpt4 key购买 nike

我正在学习中用 Java 编写战舰游戏,用于事件驱动编程。该游戏应该是一款网络游戏,我将在一个应用程序中制作客户端和服务器。

这是代表我的应用程序结构的图像: class diagram http://dl.dropbox.com/u/41993645/mvc.jpeg

言归正传 - 我想编写将作为单独线程运行并负责远程 View - Controller 通信的服务器类。因此,Server 类将负责:

  • 在无限循环中从套接字读取对象,如果有到达,将它们放入 Controller 的 BlockingQueue 中。
  • 提供诸如“sendActionEventToView()”之类的方法,该方法将允许 Controller 以另一种方式传递对象 - 从 Controller 到远程 View 。

不幸的是,当运行服务器线程时,整个应用程序停止响应。如果有人能告诉我我做错了什么,我将非常感激。我认为这是服务器代码有问题的部分:

/** Main Server method - responsible for reading objects
* and putting them in the queue if any arrived */
public void run() {
GameEvent event;
while(true) {
try {
event = (GameEvent)objectStream.readObject();
if(event != null) eventQueue.put(event);
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(IOException e1) {
e1.printStackTrace();
} catch(InterruptedException e2) {
e2.printStackTrace();
}
}
}

我认为线程卡在“readingObject()”上 - 如果流中没有任何对象,我如何强制它为另一个线程提供处理器时间?

服务器的其余部分:https://github.com/mc-suchecki/Battleships/blob/master/controller/Server.java应用程序的其余部分:https://github.com/mc-suchecki/Battleships

非常感谢您,如果有任何不清楚的地方,请评论。抱歉我的英语。

最佳答案

正常的 java 流是阻塞的。这意味着您通常希望每个套接字连接使用 2 个线程(假设是双向通信)。一个线程专用于每个套接字连接每个流(输入/输出)。

关于Java - 创建单独的线程用于通过互联网发送对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816005/

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