我目前正在客户端使用Java编写客户端 - 服务器应用程序。启动客户端时,我启动一个在后台运行的线程,并在GUI请求时发送/接收数据。 GUI不会更改网络线程对象中的任何内容,但会在网络线程循环监视的“监视器”对象中设置状态。
现在的问题是:当我在客户端循环中经常运行System.out.println()时,线程会继续运行并按原样发送/接收数据。但是当我在该循环中没有Sysout时,客户端循环停止,因此当我尝试向服务器发送内容时没有任何反应。
这是run() - 方法:
@Override
public void run() {
try {
srv_loop: while(true) {
System.out.println("Looping"); // When removing this line, it all breaks down and nothing happens when I attempt to send to the server.
if(!monitor.message.equals("")) {
if(monitor.message.equals("CLOSE")) {
break srv_loop;
}
outStream.writeInt(monitor.message.length());
System.out.println("Wrote length: " + monitor.message.length());
outStream.writeBytes(monitor.message + '\n');
System.out.println("Wrote message: " + monitor.message);
String answer = inStream.readLine();
System.out.println("Got answer: " + answer);
if(answer.equals("ACK")) {
monitor.message = "";
} else if(answer.equals("FAIL")) {
monitor.message = "FAIL";
}
}
}
} catch(IOException e) {
e.printStackTrace();
}
System.out.println("out");
}
现在我当然可以将sysout留在那里并且它可以正常工作,但是当我使用我的程序时,我不想让我的终端一直运行。这对我来说似乎很奇怪,我真的不知道为什么会这样。 sysout唯一能做的就是打印并稍微延迟,但Thread.sleep(100)也不起作用。
我知道我应该采用更多事件驱动的方法,这实际上不是用Java编写客户端的好方法,但我只使用Java进行原型设计 - Swing GUI可以在任何地方工作,这就是我需要的所有权利现在
提前致谢。