2011-12-21 3 views
0

私はJNIを使​​ってC++で書かれた線形プログラミングソルバを呼び出すJavaアプリケーションをコーディングしました。いくつかの成功した呼び出しの後、EXCEPTION_ACCESS_VIOLATIONエラーが発生し、アプリケーションが終了します。 エラーを解決してJavaアプリケーションを動作させ続けるにはどうすればよいですか?ocassionalyがEXCEPTION_ACCESS_VIOLATIONをスローするdllへのjava呼び出しを処理するには?

答えて

1

まず、dllがクラッシュすると、JVMが終了します。

これは、まずJNIを使​​用する際の欠点の1つです。したがって、一般的にを飲み込むことは簡単ではありません dllからいくつかの例外があります。

あなたのケースでは、エラーはユニット化されたメモリへのヒントです。あなたのコードでは、バインドされていないインデックス付けが必要です。

より多くの助け

0

を得るために違反がネイティブコードで起こっアクセスがある場合、実行中のJVMを維持する方法はありませんけれどもあなたはあなたのコードを投稿する必要があります。

あなたができることはいくつかあります。

  • ベスト - 慎重に小さなスタンドアロンC++クライアントで、JNIせずにあなたのlibがデバッグ、およびこの違反の理由を見つけると、(不正なポインタの使用、不正なメモリのクリーンアップなど)は、その周りの過度のチェックを追加
  • あなたを実行します純粋にこのソルバ機能を提供する責任を負う独立したJVMプロセスのDLLは、ソケット、tcp-ip、soap、restを使用して2番目のJVMと通信します。 Java Service Wrapperのように、この2番目のJVMを実行し、クラッシュした場合にJVMを再起動するように設定します。
関連する問題