a previous questionWM_DEVICECHANGE
メッセージを処理するためにWndProc
を実装して、USBデバイスがいつ接続されたり取り外されたかを知りました。Java JNA WindowProc JVMクラッシュ
私はこの問題を解決するために管理し、しかし....いくつかのケースでは、JVMがfollowin醜いエラーメッセージを表示してクラッシュ:私は、私はすぐに私のフレームを閉じた場合、それが唯一のJVMがクラッシュことがわかっ
A fatal error has been detected by the Java Runtime Environment: EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x1000cb77, pid=3448, tid=4432 JRE version: 6.0_17-b04 Java VM: Java HotSpot(TM) Client VM (14.3-b01 mixed mode, sharing windows-x86) Problematic frame: C 0x1000cb77 If you would like to submit a bug report, please visit: http://java.sun.com/webapps/bugreport/crash.jsp The crash happened outside the Java Virtual Machine in native code. See problematic frame for where to report the bug.
私のUSBデバイスを挿入した後、おそらくメッセージが正しく処理されません。エラーメッセージには、 "問題のあるフレーム"があると言われています。そのため、WM_DEVICECHANGEメッセージを処理する隠れた静的ウィンドウがクラッシュしますが、わかりません。
私の質問は、この状況で何ができるか、またはJVMのクラッシュを引き起こす可能性があることです。どんな提案も大歓迎です。
よろしく、ガボール
私はJNIを使用していません.JNAのみです。それが助けになるなら私はコードを投稿することができます。 – Gabor
@Gabor:それは問題ではなく、効果は同じです(JNAはJNIをフードの下でも使用します)。 –
JNAがJNIを使用する場合、隠しウィンドウのWndProcでUSB通信に使用するハンドルを閉じるためのWM_DESTROYメッセージを処理し、次にDestroyWindowメソッドを呼び出すため、JNを介してJNIとJNIがやりとりする可能性があります。 case MyWinUser.WM_DESTROY:{ usbComm.CloseHIDDevice(); MyUser32.MYINSTANCE.DestroyWindow(usbCommWindow); 休憩。 } – Gabor