【问题标题】:Java JNA WindowProc JVM CrashJava JNA WindowProc JVM 崩溃
【发布时间】:2011-01-25 07:51:48
【问题描述】:

a previous question 中,我想实现WndProc 来处理WM_DEVICECHANGE 消息,以便了解我的USB 设备何时连接或分离。

我设法解决了这个问题,但是....在某些情况下,JVM 崩溃并显示以下丑陋的错误消息:

Java 运行时环境检测到一个致命错误: EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x1000cb77, pid=3448, tid=4432 JRE 版本:6.0_17-b04 Java VM:Java HotSpot(TM) Client VM(14.3-b01混合模式,共享windows-x86) 有问题的框架: C 0x1000cb77 如果您想提交错误报告,请访问: http://java.sun.com/webapps/bugreport/crash.jsp 崩溃发生在 Java 虚拟机之外的本地代码中。 请参阅有问题的框架以了解报告错误的位置。

我发现如果我在插入我的 USB 设备后快速关闭我的框架,它只会使 JVM 崩溃,因此该消息可能没有正确处理。在错误消息中它说有一个“有问题的框架”,所以可能是我隐藏的静态窗口,它处理 WM_DEVICECHANGE 消息导致崩溃,但我不确定。

所以我的问题是在这种情况下可以做什么,或者什么可能导致 JVM 崩溃。欢迎提出任何建议。

问候,加博

【问题讨论】:

    标签: java jvm jna wndproc


    【解决方案1】:

    有问题的框架是指堆栈框架(即正在运行的方法)。它确实指向一个窗口(@98​​7654321@ 或javax.swing.JFrame)。

    关闭窗口是否会与 JNI 代码交互?

    【讨论】:

    • 我没有使用 JNI,只有 JNA。如果有帮助,我可以发布代码。
    • @Gabor:没关系,效果是一样的(JNA 也使用 JNI)。
    • 如果 JNA 使用 JNI,那么我的窗口可能通过 JNA 与 JNI 交互,因为在隐藏窗口的 WndProc 中,我处理 WM_DESTROY 消息以关闭用于 USB 通信的句柄,然后我调用DestroyWindow 方法,如下所示: case MyWinUser.WM_DESTROY:{ usbComm.CloseHIDDevice(); MyUser32.MYINSTANCE.DestroyWindow(usbCommWindow);休息; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多