我有一个用 Java 编写的程序,并使用 Windows 任务计划程序设置为每 5 分钟运行一次。它执行“C:\Program Files\Java\jre7\bin\javaw.exe”并传递 jar 文件和所有命令行参数。
在大多数情况下,这运行得非常好,但时不时地,我会回到我的计算机并看到一个弹出窗口,说“Java(TM) Platform SE 二进制文件已停止工作”。因此,起初,我认为这与我的代码有关,并添加了许多附加到文本文件的调试语句。当它崩溃时,我检查了文本文件,其中没有列出不完整的运行。然后我在我的主要方法中添加了一个打印语句:
public static void main (String[] args) {
System.out.println ("Main Method Called");
new Runner (args);
}
然后我不断地从命令行运行 Java 程序,直到它崩溃,我发现了一些有趣的东西。在崩溃时,它从未打印过“Main Method Called”。现在,我发现这很有趣,因为这告诉我崩溃的不是我的 Java 程序,而是 Java 本身。
然后我继续往我的命令行添加了详细的打印语句:
java -verbose:class -verbose:gc -verbose:jni -jar ...
从那里,我继续这个过程,直到程序再次失败。当它失败时,输出(346 行)将比成功运行(667 行)小得多。直到第 346 行输出突然停止时,两次运行中的所有内容都完全相同。所以,这让我觉得第 346 行或第 347 行发生的任何事情都会导致它崩溃。这是第 340-346 行:
[Loaded sun.nio.cs.StandardCharsets from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.util.PreHashedMap from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.nio.cs.StandardCharsets$Aliases from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.nio.cs.StandardCharsets$Classes from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.nio.cs.StandardCharsets$Cache from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.security.action.GetPropertyAction from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded java.util.Arrays from C:\Program Files\Java\jre7\lib\rt.jar]
在成功运行中,输出继续,这里是第 347-355 行:
[Dynamic-linking native method java.lang.Object.getClass ... JNI]
[Dynamic-linking native method java.lang.Class.forName0 ... JNI]
[Loaded sun.nio.cs.HistoricallyNamedCharset from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.nio.cs.MS1252 from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.nio.cs.SingleByte from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded java.lang.Class$1 from C:\Program Files\Java\jre7\lib\rt.jar]
[Dynamic-linking native method sun.reflect.Reflection.getClassAccessFlags ... JNI]
[Loaded sun.reflect.ReflectionFactory$1 from C:\Program Files\Java\jre7\lib\rt.jar]
[Loaded sun.reflect.NativeConstructorAccessorImpl from C:\Program Files\Java\jre7\lib\rt.jar]
最后,当它崩溃时,Windows 会弹出一个弹出窗口(我之前提到过),其中包含以下信息:
Problem signature:
Problem Event Name: APPCRASH
Application Name: java.exe
Application Version: 7.0.210.11
Application Timestamp: 515d999b
Fault Module Name: ntdll.dll
Fault Module Version: 6.1.7601.18247
Fault Module Timestamp: 521eaf24
Exception Code: c0000005
Exception Offset: 00000000000986ea
OS Version: 6.1.7601.2.1.0.256.48
Locale ID: 1033
Additional Information 1: 4c0d
Additional Information 2: 4c0d4d78887f76d971d5d00f1f20a433
Additional Information 3: 4c0d
Additional Information 4: 4c0d4d78887f76d971d5d00f1f20a433
Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409
If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt
在阅读问题签名并看到“ntdll.dll”列为原因后,我搜索了涉及该问题的问题,但没有找到任何解决方案。
你有什么想法我可以做些什么来解决这个问题吗?