我正在开发一个应用程序,该应用程序决定以一种非常无法解释的方式停止工作。经过一些调试和错误跟踪,我发现问题出在代码中对特定方法的调用中。
public static void main(String[] args) throws FileNotFoundException {
System.out.println("Print ");
InternalPanel.init();
}
IN INTERNAL PANEL
public static void init() {
System.out.println("Line");
}
为了澄清,从其他类调用任何其他方法都是有效的。从此特定类调用任何方法都不起作用。
此外,这个类(以及其中的方法)一直有效。
当它停止工作时,我对程序中完全不相关的内容进行了微小的更改(例如,在单独的线程中,对相关类没有影响)
最佳答案
尝试查看InternalPanel 类的其余部分。静态初始化中的某些内容很可能会影响其他内容。例如:
public class InternalPanel
{
private static SomeOtherThing thing = new SomeOtherThing();
...
}
在上面的代码中,如果实例化 SomeOtherThing 最终导致一系列事件,最终产生无限循环或堆栈溢出,那么就会产生您所看到的效果。它实际上不是对 init
函数的调用,而是 InternalPanel 类的静态初始化。
(您可以通过让测试程序调用 InternalPanel
类上的其他虚拟方法来轻松检查这是否是静态初始化问题。)
在 Debug模式下,您可能只想在程序似乎被卡住时尝试随机暂停执行,并查看正在运行的代码以及堆栈跟踪的样子。
关于Java 程序在调用特定类的任何方法时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895174/