2017-05-22 2 views
0

ImageJプラグインとそのソースには、動作させるために.dllライブラリが必要です。プラグインはImageJプラグインフォルダに入れても問題なく動作します。NetBeansからImageJプラグインを起動すると、JNIエラーが発生します。 ImageJのみから起動すると、うまく動作します

しかし、NetBeans(既にNetBeanプロジェクトだった)でプロジェクトを開き、ImageJを起動してプラグインを設定する簡単なテストクラスでIDEから起動しようとしたので、新しい機能を追加するためにソースを修正する必要がありますプロジェクトディレクトリ\ dirにdirします。これは私の他のすべてのプラグインで動作しますが、ここでUnsatisfiedLinkErrorを取得します。

Dependency Walkerのいくつかの調査と使用の後、私はプロジェクトパスにいくつかの.dllがありませんでした。今私はそれらをすべて正しい場所に置いて、-Djava.library.path = "paths_to_all_my_libs"で実行しても、私はまだエラーが発生します。特定のプロシージャが見つかりません。

ImageJのインストールにdistの.jarをコピーしなければならないので、実際には混乱する危険があり、コンソールを使ってデバッグ用のものを出力することはできません。また、ImageJのみでうまくいくとNetBeansでうまく動作しない理由を理解できません。

どのようなアイデアも大歓迎です!あなたがここに二つのアプローチで行くことができ

答えて

0

  1. あなたは、(例えば、あなたがあなた自身のために何かを開発している)場所について使用を気にしない場合はPATH
  2. にあなたのDLLの場所を追加してくださいSystem.loadを使用してdllの正確な場所 - 引数としてライブラリの明示的な場所をとります。
+0

これは実際に私の問題です。私はパス(私のプロジェクトのために-Djava.library.pathオプションで設定されています)にすべてのdllを持っていますが、プロシージャがあります。これは私がネイティブコードのメソッドであると仮定します。 System.loadまたはSystem.loadLibraryを使用します。 ImageJが使用しているのと全く同じパスを使用しようとしましたが、NetBeansから実行するとうまくいきません。 – PikCeLL

+0

しかし、PATH環境変数も設定していますか? System.loadを使用してライブラリをロードしようとすると、エラーは何ですか?おそらく、欠けている他のDLLがありますか? – mko

+0

私はPATH変数をチェックしました。私の.dllがあるディレクトリは含まれていません。私はPATHのどこかに.dllを変更したりコピーしたりする権利がありません。 System.loadを使用するとエラーが発生します。 'スレッド内の例外" main "java.lang.UnsatisfiedLinkError:C:\ path_to_my_dll \ Pylon64JNI-visual.dll:指定されたプロシージャを見つけることができませんでした \t at java.lang.ClassLoader $ NativeLibrary.load(ネイティブメソッド) ' パスにあったライブラリのSystem.loadLibraryと他のライブラリのSystem.loadを使用して、Pylon64JNI-visual依存ライブラリ(DWで見つかったもの)が事前にロードされていることを確認しました。 – PikCeLL

関連する問題