客户端线程神秘地漏掉了java代码,因此没有回答

6fe3ivhb  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(220)

执行每一行代码->事件->跳过重要的java代码行

客户端服务器#assumenocodeoptimization#ide:processing(麻省理工学院processing.org)

有一个线程“connectionhandler”停留在它发送或接收数据的循环中。在它接收第一个数据之前,每一行代码都会被执行。之后,程序似乎在system.out.println()处暂停!?然后,当更多的数据到达时,会再次执行某些行java代码,但会跳过与之完全相同的system.out.println()——此外,我前面提到的其他内容。
真正的问题是跳过了sendoutput()方法。这才是真正磨我的齿轮。请帮忙。
我正在麻省理工学院开发的一个名为“处理”的环境中编程。据我所知,它只会在代码周围 Package 更多的java代码。
在下面的代码片段中,我将解释为什么我认为jit或aot的代码优化不是问题所在(最后我猜我错了)。我希望相反,因为你不能通过系统变量来处理抑制优化)

  1. private void runConnectionHandler() {
  2. final BufferedReader inFromClient = getBufferedReader(socket);
  3. final DataOutputStream dataOutputStream = getDataOutputStream(socket);
  4. while (true) {
  5. getInput(inFromClient);
  6. sendOutput(dataOutputStream);
  7. System.out.println("Cycle ends");
  8. }
  9. }
  10. private void getInput(final BufferedReader input) {
  11. System.out.println("Get");
  12. try {
  13. String clientSentence = null;
  14. if (input.ready()) {
  15. while ((clientSentence = input.readLine()) != null) {
  16. inputQueue.add(new GameData(clientSentence));
  17. System.out.println("Received se: \"" + clientSentence + "\"");
  18. System.out.println("1");
  19. }
  20. System.out.println("2");
  21. }
  22. System.out.println("3");
  23. }
  24. catch (final Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. private void sendOutput(final DataOutputStream dataOutputStream) {
  29. System.out.println("Send");
  30. while (outputQueue.peek() != null) {
  31. try {
  32. String out = outputQueue.poll().toString();
  33. dataOutputStream.writeBytes(out + "\r\n");
  34. dataOutputStream.flush();
  35. System.out.println("Sent \"" + out + "\"");
  36. }
  37. catch (final Exception e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }

输出:在第一个数据之前:
不知道优化,我认为它也应该在这里生效,但它没有?

  1. ...
  2. Get
  3. 3
  4. Send
  5. Cycle ends
  6. ...

输出:第一个数据到达
“1”之后输出停止。为什么是system.out.println(“2”);等等没被处决?!为什么会停下来?!?!

  1. ...
  2. Get
  3. 3
  4. Send
  5. Cycle ends
  6. Get
  7. Received se: "SET PLAY MODE"
  8. 1

输出:手动发送更多数据
gad dayium,我是说我的系统到哪里去了。out.println(“get”);什么都没有?!

  1. ...
  2. Get
  3. Received se: "SET PLAY MODE"
  4. 1
  5. Received se: "Hey Ho1"
  6. 1

输出:服务器关闭
当我关闭另一端(服务器)时,每一行代码都会再次执行?!?!此外,它既不停止,也不抛出执行(但可能是不同的问题)。

  1. ...
  2. Get
  3. 3
  4. Send
  5. Cycle ends
  6. ...

另外,如果我的观念被深深打破,我会感激很多提示。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题