我的处理 3 代码表现出一些奇怪的行为。我定义了一个 void exit() 方法,该方法在随机时间执行,而用户实际上没有告诉代码退出。方法如下:
void exit()
{
println("clearing buffer and closing file");
if (output != null) {
print("output is not null");
try {
output.close();
}
catch (IOException e) {
println("Error while closing the writer");
}
}
super.exit();
}
如您所见,它所做的唯一事情就是尝试关闭称为输出的缓冲写入器。冲洗这个作家并不重要,所以现在我只是将其从我的草图中删除。但从长远来看,我很好奇这是如何发生的。我的代码中没有其他地方显式调用退出方法。 IE,代码无法决定退出。仅当用户使用 X 关闭问题时才会出现此情况。
注意:我无法上传此方法所附的完整代码,因为它太长了。我认为也许更好的方式来表达我的问题是这样的:
“嗨,我是一个菜鸟,对退出方法一无所知。有没有什么方法可以在我不显式调用它或点击退出按钮的情况下以某种方式调用该方法?”
最佳答案
将其添加到 exit()
方法的开头。
new Exception().printStackTrace();
生成的堆栈跟踪应该允许您找出是什么在调用您的 exit()
方法。
或者,如果您无法调整代码,则可以使用调试器运行应用程序,并在 exit()
方法的开头设置断点。
要回答您是否可能的问题,答案取决于您所说的“无需我明确调用”的含义。调用方法的方式有很多种,其中有些方式相当晦涩;例如
- 您可以使用反射从声明类中获取
exit
方法的Method
对象,然后调用invoke(...)
就这样。 - 您可以通过 JNI 或 JNA API 从 native 代码调用 Java 方法。
- 您可以生成包含
exit()
调用的 Java 源代码,对其进行编译、加载和运行。 - 您可以使用 BCEL 或类似方法将
exit()
调用插入到“无害”方法中。
还有...
- 如果 JVM 附加了调试代理,调试器可以在 JVM 中的某个线程上调用
exit()
。
关于processing - exit() 方法在没有 exit 命令的情况下进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37658731/