2011-01-25 25 views
1

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のクラッシュを引き起こす可能性があることです。どんな提案も大歓迎です。

よろしく、ガボール

答えて

0

問題のフレームがスタックフレームを指す(すなわち、実行メソッド)。 ではありません(java.awt.Frameまたはjavax.swing.JFrame)。

ウィンドウを閉じても何らかの形でJNIコードと対話しますか?

+0

私はJNIを使​​用していません.JNAのみです。それが助けになるなら私はコードを投稿することができます。 – Gabor

+0

@Gabor:それは問題ではなく、効果は同じです(JNAはJNIをフードの下でも使用します)。 –

+0

JNAがJNIを使​​用する場合、隠しウィンドウのWndProcでUSB通信に使用するハンドルを閉じるためのWM_DESTROYメッセージを処理し、次にDestroyWindowメソッドを呼び出すため、JNを介してJNIとJNIがやりとりする可能性があります。 case MyWinUser.WM_DESTROY:{ usbComm.CloseHIDDevice(); MyUser32.MYINSTANCE.DestroyWindow(usbCommWindow); 休憩。 } – Gabor

関連する問題