我有这个Transmitter类,其中包含一个BufferedReader和一个PrintWriter。在主类上,该想法是在主套接字上使用Transmitter.receive()和Transmitter.transmit()。问题是:
public void receive() throws Exception {
// Reads from the socket
Thread listener = new Thread(new Runnable() {
public void run() {
String res;
try {
while((res = input.readLine()) != null) {
System.out.println("message received: " + res);
outputMessage = (res);
if (res.equals("\n")) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
};
});
listener.start();
listener.join();
}
线程更改了“ outputMessage”值,我可以使用辅助方法来获取该值。问题是,如果没有加入,我的客户会得到outputMessage,但我想在主类上多次使用它,如下所示:
trans1.receive();
while(trans1.getOutput() == null);
System.out.println("message: " + trans1.getOutput());
但是加入这个system.out永远不会执行,因为
trans1.receive()
卡住了...有什么想法吗?编辑1:这是发射机类https://titanpad.com/puYBvlVery
最佳答案
您可以发送\n
;这并不意味着您会在Java代码中看到它。
就像Javadoc for BufferedReader.readLine()
(强调我的)中所说的那样:
(返回)一个包含行内容的字符串,不包含任何行终止符
因此"\n"
将永远不会返回。