問題タブ [jnienv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JNI GetFieldID が内部クラスに対して null を返す
JNIでアクセスしたいパブリック内部クラスがあります。GetFieldID は、内部クラスの fieldId にアクセスしているときに null を返します
以下はコードです
注:クラスファイルでjavap -sを実行すると、次の出力が得られました
ネイティブ関数を呼び出すクラスです。
ネイティブ コード
次のオプションも試しましたが失敗しました
classB のフィールド ID を取得して b1 にアクセスする方法を提案できますか。
java - 依存関係のある JNI ロード jar
JNI を使用して C++ プログラムに次の Java クラスをロードしようとしています。
log4j-1.2.16.jar に依存します
ここに私のC++コードがあります:
HelloWorld.jar を C++ アプリケーションのルート フォルダーに配置しました。hello_world_class をロードしようとすると、次の例外がスローされます。
log4j 依存関係は HelloWorld.jar 内にないため、JNI はそれを検出しません。libフォルダーとHelloWorld.jarと同じフォルダーに配置しようとしましたが、機能しませんでした。JNIが認識してロードできるようにするには、log4j.jarをどこに配置する必要がありますか?
どうもありがとう、私はjniの初心者なので、答えを明確にしてください。私は一日中このエラーに悩まされていました TT
java - ネイティブ メソッドから JNI によって作成されたローカル参照を返す
JNIリファレンスはそれを言います
「ローカル参照は、ネイティブ メソッド呼び出しの間有効です。ネイティブ メソッドが戻った後、それらは自動的に解放されます。
ソース: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#global_local
私はここでちょっと迷っています。上記によると、明示的にNewGlobalRefを呼び出し、呼び出しから返されたオブジェクトをNewObjectに渡す必要があります。私はこれを試してみましたが、GC が作動すると、参照が収集されないようです (何かがまだ保持されているように)。次のプロジェクトを考えてみましょう: Main.java :
Dummy.java :
libdummy.so には、ネイティブメソッドの実装が含まれています。
メイン ループが示す動作は私には奇妙に思えます: 1) getWeakGlobalRefまたはgetLocalRefを呼び出してArrayListをクリアすると、GC は作成したすべてのダミーオブジェクトを収集するようです。2) getGlobalRef を呼び出すと、ArrayListをクリアするかどうかに関係なく、オブジェクトは収集されません。l
ここで少し混乱しています。それは、ローカル参照をネイティブ メソッドから Java コードに戻すことができるということですか?
android-ndk - jString定義のコンパイルエラー
私はJNIで働いています。プロジェクトの main.cpp ファイルに 1 つの jstring を定義しようとしました。以下のものを使用しようとしましたが、NDKでコンパイルしようとしたとき。エラー表示します。
NSString または String を使用する別の方法がある場合は、お知らせください。
android - android jni - NewObject関数はコンストラクタを呼び出しませんか?
ネイティブ コードから Java メソッドを呼び出す簡単な例を作成しました。いくつかのオブジェクトの Java メソッドを呼び出していますが、コンストラクターは呼び出されません。
私のJavaクラス:
cpp コード :
主な活動 :
}
ログ出力は次のとおりです。
オブジェクトのメソッドを呼び出しているのに、コンストラクターが呼び出されないのはどうしてですか?
java - JNIスレッドモデル?
Java から C/C++ を呼び出す場合、Java スレッドが待機している間に C/C++ コードを実行するために、JavaVM または JNI によって新しいスレッドが作成されますか? 私の C/C++ コードは GPU で何かを実行し、結果を返すために特定のバッファをチェックする必要があるため、これを尋ねます。結果が得られたら、Java 関数を再度呼び出す必要があります。
そのため、バッファを継続的にチェックし、利用可能なデータがあればJava側にコールバックするスレッドをC++側に作成することを考えていました。
java - JNI は、引数の型に基づいて引数の順序付けを行う必要がありますか?
Web サービスからデータを受信し、そこから JNI レイヤーで解析するアプリケーションに JNI コードを統合しようとしています。関数とメソッドの流れは次のとおりです。
jclass および jmethodID 用に定義された変数:
値を保持するために c レイヤーで定義された構造体
この機能には問題があります。この関数は、Web サービスからデータを受信し、それを解析して構造体 User_Info を作成した後に呼び出されます。
Java メソッド:
問題は、コードを実行しているときに次のエラーが発生することです。
JNI エラー (アプリのバグ): jboolean (0/1) が必要ですが、com.model.UserInfo com.model.UserInfo.createUserInfo(int, java.lang.String, java.lang.String,ブール値)
java メソッドと jni 関数で引数の順序を変更し、int 'userId' の直後にブール値の 'follow' を保持すると、問題は発生しません。
私の質問は:
JNI では、long/boolean の前に int パラメーター、オブジェクトの前にプリミティブ パラメーターなど、型に基づいて引数を並べ替える必要がありますか。
はいの場合、それを示唆する参照/ドキュメントがあります。そうでない場合、引数の順序を変更した後にコードが機能するのはなぜですか?
android - Android JNI レポートでメソッドが見つかりません
すべてのネイティブ関数をラップするために次のコードを使用しています
そして私はC++から以下を使用します
そして、メインのアクティビティからラッパー クラスを呼び出します。
しかし、私が呼び出すcall_Java_checkStoragePermission()
と、次のエラーが発生します
誰かが私を助けることができますか?
android - WeakGlobalRef からの JNI LocalRef
WeakGlobalRef がガベージ コレクションされたオブジェクトを指しているという問題がありました。この ref で CallVoidMethod を呼び出そうとすると、アプリケーションがクラッシュしました。これを修正するには、次のようにします。
これは CallVoidMethod でまだクラッシュしています。これはそのように行うのに有効ですか、それともローカル ref をチェックする必要がありますか?IsSameObject
私がダンプで最後に得ること、より高いものは、任意のメソッドを指すことができません: