ライブラリ用のswigでJNIラッパーを作成しました。 swig directorを使ってJVMにコールバックします。これらのコールバックの一部は、ネイティブライブラリ内で作成されたスレッドで発生します。非JVMスレッドの最初のコールバックはSIGSEGVで失敗し、AttachCurrentThreadの負の戻り値(-1)を無視して、実際にはnullのjenvポインタを逆参照することができます。これはswig生成コードで発生します。JNI:AttachCurrentThreadは-1を返します
ネイティブ側で作成したスレッドのディレクタークラスを介してJVMにコールバックしようとしました。これは正常に動作します。しかし、ラップされたライブラリによって作成されたスレッドからは機能しません。
AttachCurrentThreadが失敗する可能性のある原因は何ですか?
このようなサウンドは、SWIGよりも一般的なJNI質問です。 http://stackoverflow.com/questions/12900695/how-to-obtain-jni-interface-pointer-jnienv-for-asynchronous-callsを参照してください。一方、あなたはおそらくこれを説明する最小、完全な例を作ることができますか?そうすれば、誰かにとってははるかに簡単な解決策を見つけ出すことができます。 – Flexo