我有这个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"将永远不会返回。

07-27 13:50