java 隐藏通信 dll 使 jvm 崩溃

java hid communication dll makes jvm crash

我正在 Java 开发一个应用程序,它需要与 TI 的微处理器 msp430 通信。为了与设备通信,我使用 hidDemo java 代码和提供的 DLL(使用 hid API C 代码)。

我的问题是我在 DLL 级别遇到导致 JVM 崩溃的错误。当我与设备通信以及拔下设备时出现问题。

我尝试在 DLL 级别处理错误但没有成功。我还尝试使用较新的 hid API 版本重新编译 DLL;仍然没有运气。

JRE 生成的错误跟踪如下:

Instructions: (pc=0x74672874) 0x74672864:
[error occurred during error reporting (printing registers, top of stack, instructions near pc), id 0xc0000005]

Stack: [0x4f7c0000,0x4f9c0000], sp=0x4f9bf1c0, free space=2044k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C 0x74672874 C [hidcommunicationmanager.dll+0x11db3] C [hidcommunicationmanager.dll+0x13844] j com.ti.msp430.usb.hiddemo.management.HidCommunicationManager.getSerialsForVidPid(II)[Ljava/lang/String;+0

错误是 EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x74672874, pid=3336, tid=5444,类似于 NullPointer 异常。

关于如何解决这个问题的任何提示?

Java 不允许您捕获在 DLL 中创建的内存错误。

你可以做的是启动另一个进程到 运行 中的 DLL。如果你有一个 32 位 DLL 和一个 64 位 JVM,或者你没有第三方库,这会很有用不信任(JAR 或 DLL)

您可以通过管道、套接字或共享内存与您启动的 JVM 通信。如果进程终止,您的主程序将保持 运行ning 并且它可以重新启动进程。