更新 事实证明我同时在我的服务器和客户端上初始化我的输入流,这就是导致问题的原因。
在我正在制作的应用程序的服务器端:我从未到达代码的一部分,这导致我的客户端在此时阻塞。最初我假设没有足够的资源来运行程序,所以我退出了所有其他应用程序并再次尝试。我让它运行了一个小时,但仍无济于事。
我怎么能弄清楚出了什么问题?我无法理解它可能阻塞的地方,并且在此之前的任何地方都无法陷入无限循环。
String[][] coordinates1 = new String[10][10], coordinates2 = new String[10][10];
public void run() {
//initializes the 10x10 grids for the player
synchronized (this) {
//outer loop is for the rows
for (int loop = 0; loop < 10; loop++) {
//the inner loop is for the columns
for (int loop2 = 0; loop2 < 10; loop2++) {
coordinates1[loop][loop2] = "~ ";
coordinates2[loop][loop2] = "~ ";
}
}
}
if (player == 1) {
//deals with the client assuming it is player1
//declares Object i/o streams
ObjectInputStream in = null;
ObjectOutputStream out = null;
try {
//initializes i/o streams
in = new ObjectInputStream(client.getInputStream());
out = new ObjectOutputStream(client.getOutputStream());
//writes the two 10x10 grids to the client
out.writeObject(coordinates2);
out.writeObject(coordinates1);
out.flush();
...
}
它永远不会到达的部分是“out.writeObject(..);”线。
可以找到完整的代码M2Eclipse FAQ以及客户端。
答案 0 :(得分:1)
它没有被阻止,您的程序正在等待。
你永远不会到达writeObject行,因为前面的两行(getInputStream和getOutputStream)将等待&#34;等待&#34;为套接字建立有效的连接。您可以通过在此周围放置两条日志行来验证这一点:
in = new ObjectInputStream(client.getInputStream());
要解决此问题,我建议您查看建立连接的代码(ServerSockets和Sockets)。