java - Client-Thread 神秘地遗漏了 Java 代码,因此没有回答
问题描述
执行每一行代码 -> 事件 -> 跳过重要的 Java 代码行
# 客户端-服务器 # AssumeNoCodeOptimization # IDE:Processing (麻省理工学院的 Processing.org)
有一个线程“ConnectionHandler”停留在一个循环中,它可以发送或接收数据。在它接收到第一个数据之前,每行代码都会被执行。之后,程序似乎在 System.out.println() 处暂停!?然后,当更多数据到达时,Java 代码的某些行会再次执行,但同样的 System.out.println() ——除此之外——我之前提到的其他内容被跳过。
问题实际上是方法sendOutput()被跳过了。这才是真正磨砺我的齿轮。请帮忙。
我在麻省理工学院开发的名为 Processing 的环境中编程。据我所知,它只会在您的代码周围包装更多的 Java 代码。
在下面的代码片段下面我将解释为什么我认为通过 JIT 或 AOT 优化代码不是问题(最后我猜我会错。我希望相反,因为你不能将系统变量传递给处理来抑制优化)
private void runConnectionHandler() {
final BufferedReader inFromClient = getBufferedReader(socket);
final DataOutputStream dataOutputStream = getDataOutputStream(socket);
while (true) {
getInput(inFromClient);
sendOutput(dataOutputStream);
System.out.println("Cycle ends");
}
}
private void getInput(final BufferedReader input) {
System.out.println("Get");
try {
String clientSentence = null;
if (input.ready()) {
while ((clientSentence = input.readLine()) != null) {
inputQueue.add(new GameData(clientSentence));
System.out.println("Received se: \"" + clientSentence + "\"");
System.out.println("1");
}
System.out.println("2");
}
System.out.println("3");
}
catch (final Exception e) {
e.printStackTrace();
}
}
private void sendOutput(final DataOutputStream dataOutputStream) {
System.out.println("Send");
while (outputQueue.peek() != null) {
try {
String out = outputQueue.poll().toString();
dataOutputStream.writeBytes(out + "\r\n");
dataOutputStream.flush();
System.out.println("Sent \"" + out + "\"");
}
catch (final Exception e) {
e.printStackTrace();
}
}
}
输出:在第一个数据之前:
对优化一无所知,我认为它也应该在这里生效,但事实并非如此?
...
Get
3
Send
Cycle ends
...
输出:第一个数据到达
在“1”之后,输出停止。为什么是System.out.println("2"); 等等不执行?!为什么停了?!?!
...
Get
3
Send
Cycle ends
Get
Received se: "SET PLAY MODE"
1
输出:手动发送更多数据
Gad dayium,我的意思是我的System.out.println("Get"); 和所有?!
...
Get
Received se: "SET PLAY MODE"
1
Received se: "Hey Ho1"
1
输出:服务器关闭
当我关闭另一端(服务器)时,每一行代码都会再次执行?!?!此外,它既不会停止,也不会引发执行(但可能是不同的问题)。
...
Get
3
Send
Cycle ends
...
另外,如果我的概念被严重破坏,我将不胜感激。
解决方案
推荐阅读
- java - 为 /events URL upvotes 执行 POST 时收到错误“无法构造实例”消息
- c++ - 'MyVector 类型的非常量引用的无效初始化
&' 来自“MyVector”类型的右值 ' - html - 将 localhost URL 添加到 CSP 的允许列表以进行本地开发是否安全?
- r - 如何将一段 R 代码应用于我的数据框的每一列
- python - 如何在使用 os.walk 定义 ROOT_DIR 时从代码源分析中排除子目录和文件
- sql - SQL:如何在排序后删除重复项,同时保持排序顺序
- postgresql - 为逐月变化创建数据透视表
- sql - 我应该在 SQL 上使用哪个命令?
- javascript - Moment isBetween(hours) 给出了意想不到的结果
- python - “+”与在python中的列表中追加