問題タブ [java-native-interface]
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 - Java で C コードを書き直すか、JNI を使用しますか?
私は現在、Java で書かれたプロジェクトを開発しています。私たちのプロジェクトに組み込む必要がある C/C++ で書かれた多数のアルゴリズム (少なくとも数百) があります。JNI を使用してこのコードを呼び出すか、すべてのアルゴリズムを Java で書き直すかの 2 つのオプションがあります。
JNI を使用すると、まったく新しい一連の問題が発生する可能性があることを認識しています。そのため、Java ですべてのコードを書き直すことさえ検討されています。しかし、それを書き直すという考えは...間違っているようです。アルゴリズムはテスト済みで、私の知る限り動作しますが、言語が間違っているだけです。
この状況で、JNI はこのタスクを容易にしますか? それとも、Java でコードを書き直すよりも頭痛の種になるのでしょうか?
編集 #1: 関連する質問 - JNI の有用性
編集 #2: 参考までに - 私たちの Java プロジェクトは、移植性を意図したものではありません。これにより、おそらく移植性が低下するという JNI の欠点の 1 つが解消される可能性があります。
java - ネイティブ OS への Java ドラッグ アンド ドロップ
私はしばらくの間見回してきましたが、ImageIconをWindowsフォルダーにドラッグして、ImageIconを「ドロップ」した場所のパスを取得する方法に関するJavaのライブラリまたは情報をまだ見つけることができません。OSX/Linux/Win で動作するプラットフォームに依存しないソリューションが本当に欲しいのですが、少なくとも Windows の実装が欲しいです。これを行うためのライブラリを持つプロジェクトはありますか? そうでない場合は、これを行うために C++ コードを開発する方法について方向性 (Web サイト) を取得できませんでした。可能であれば、JNI を介して行う必要があると思います。それは実現可能ですか?
私は Java、Python、Perl の経験が豊富ですが、C/C++ への露出は限られています。そのため、これを行うためのライブラリまたはコードが既に存在することを望んでいます。私の手を汚すことをいとわない。
java - デスクトップ アプリケーションの重要なイベントをユーザーに通知するにはどうすればよいですか?
私たちの顧客は、MS Office などの他のソフトウェアに加えて、私たちのソフトウェア (Webstart を使用して開始された Java Swing アプリケーション) を使用して仕事をしています。ときどき、彼が私たちのソフトウェアで遅滞なく処理しなければならない重要なイベントがあります。その場合、顧客は目立つ通知を望んでいます。現在、彼は Excel を使用している可能性があるため、メッセージ ボックスをポップアップ表示するだけでは十分ではありません (ただし、タスク バーのエントリは点滅します)。
Outlook 通知機能のようなメカニズム、つまり常に表示されているがフォーカスを奪わないポップアップが必要です。通知機能は、メッセージの理由がなくなる (ユーザーが問題を解決する) か、ユーザーがメッセージを閉じる (Outlook など) まで、常に表示される必要があります。さらに、トレイ アイコンを表示し、場合によってはサウンドを再生します。
Java6 java.awt.SystemTray と JDIC (そのプロジェクトのクラスパスにすでにそのライブラリがあるため、バージョン 0.9) に相当するものを試しましたが、TrayIcon.displayMessage のタイムアウトを設定する方法が見つかりませんでした。メソッド、およびメッセージが常に一番上にあるとは限らないようです。
要求された動作を実現するための JNI 以外のオプションはありますか?
JNI が唯一の選択肢であり、Windows がお客様の唯一のプラットフォームである場合、Outlook 通知機能は Outlook のみの機能ですか、それとも Windows API を介して自由に使用できますか?
または、ユーザーが別のソフトウェアで現在のタスクを完了するのを妨げることなく、あるソフトウェアで実行する重要なタスクについてユーザーに通知するために、他にどのようなオプションがありますか? したがって、システム モーダル ダイアログはオプションではありません。
java - JNI 例外を処理する単純なコード
次のJavaコードをJNIとして表現する、きちんとした方法が欲しいです。
これを行うためのきちんとした JNI パターンはありますか? 現在、私はこれを持っています:
そしてもちろん、これはそのように処理された例外ごとに繰り返されます。もっと良い方法があるはずです。推奨事項はありますか?既存のすべてのコードを JNA に移植することに興味はないので、いわば自作で実装できるパターンが必要です。
java - Java アプレット内でネイティブ ライブラリを動的にロードする
ユーザーのシリアル ポートから読み取る Java アプレットを作成しようとしています。このために、RXTX ライブラリと組み合わせてJava Comm APIを使用しています。ローカル Java アプリケーションを介してデータを読み取ることに成功しましたが、アプレット内から同じことを行うことができないようです。問題は、RXTX ライブラリがネイティブ ライブラリであり、このライブラリを Java アプレット内にロードする方法が見つからないことです。興味深い記事を 2 つ見つけました (Using JNI in Appletsはこの記事を参照しています) が、どちらも 10 年以上前のものであり、新しい解決策があるかどうか疑問に思っています。または、代替案を提案できる場合は、ぜひお聞かせください。
java - Java stderr はどこに行くのですか?
知りたいのですが、Java stderrは標準でどこに行きますか?
「「標準」エラー出力ストリームを再割り当てする System.setErr を使用して stderr を変更できることは知っていますが、どれが「標準」であるかはわかりません。
私の質問をもっと具体的にしたいと思います:Java(jni)で使用するC++ライブラリがあります。問題は、私の C++ ライブラリからの stderr への出力が見えないように見えることです。C++ ライブラリで assert () を呼び出し、ライブラリを使用する Java API を実行すると、コンソールに出力が表示されません。
weblogic - JNI コードを weblogic に統合するにはどうすればよいですか?
weblogic にデプロイされるアプリケーションを作成しています。このアプリケーションの一部として、JNI を使用するサードパーティ ライブラリを使用しています。.so ファイルを weblogic で使用できるようにするにはどうすればよいですか?
LD_LIBRARY_PATH を設定して weblogic を再起動しようとしましたが、うまくいきませんでした
java - Javaからネイティブコードにアクセスするための最速の方法はどれですか?
Javaからネイティブライブラリを呼び出す最速の方法はどれですか?
私が知っているのは
- NativeCall-現在使用しているもの
- JNA-使用していませんが、妥当に見えます
- JNI-書くのは恐ろしいように見えますが、スピードが出ればやります
class - ネストされたクラスの JNI 署名?
WindowsXP、JavaバージョンでJNIを使用しようとしています:
Java バージョン "1.6.0_13" Java(TM) SE ランタイム環境 (ビルド 1.6.0_13-b03) Java HotSpot(TM) クライアント VM (ビルド 11.3-b02、混合モード、共有)
ネストされたクラスの jclass を取得しようとするとき
jclass c = env->FindClass ("A$B"); (c) をアサートします。
2行目は、Javaのバージョンがわずかに異なるLinux(1.5 ... IIRC)でも同じことが問題なく機能すると主張しています。
私はいくつかの順列を試しました
LA$B; AB LA.B;
しかし、役に立たない。
どんなアドバイスでも大歓迎です。
マーティン