0

Java で、デフォルトの Windows ブラウザーで URL を開こうとしています。残念ながら、コードは 1.5 と互換性がある必要があるため、デスクトップ クラスのユーティリティは使用できません。

解決策として、ネイティブ メソッドを使用して ShellExecute を呼び出しています。

public class ShellExec {
   public native int execute(String document);

   {
       System.loadLibrary("HSWShellExec");
   }

   public static void main(String args[]) throws IOException {
       new ShellExec().execute("http://www.google.com/");
   }

}

明らかに java.library.path に含まれているEclipseプロジェクトルートにDLLファイルを配置しました。

ShellExec がデフォルト パッケージに含まれている場合はすべてが完璧に機能しますが、それを他のパッケージに移動すると、ネイティブ コールは次のように失敗します。

Exception in thread "main" java.lang.UnsatisfiedLinkError: apackage.ShellExec.execute(Ljava/lang/String;)I
at apackage.ShellExec.execute(Native Method)
at apackage.ShellExec.main(ShellExec.java:13)

誰もが理由を知っていますか?http://www.heimetli.ch/shellexec.htmlの DLL を使用しています。

ありがとう

..後で編集:

最終的に、このクラスと他のクラスは Eclipse RCP アプリケーションのユーティリティ クラスになり、すべての外部 DLL は、java.library.path が指す共通の lib フォルダーに配置されます。DLL は表示されますが、上記の単純な例と同じタイプのエラーが発生します。

4

2 に答える 2

0

ライブラリをロードしているブロックは、クラスに対して静的ではなく、ShellExec のインスタンスで匿名ブロックとして定義されているだけです。ShellExec のインスタンスを作成しないため、匿名ブロックが呼び出されることはなく、ライブラリが読み込まれることもありません。

代わりにあなたが持っているべきです

static {
   System.loadLibrary("HSWShellExec");
}

それがあなたの問題を解決すると思います。

于 2012-01-20T21:48:16.700 に答える
0

VM 引数-Djava.library.path=<path-to-dll-folder>をプロジェクトの起動構成に渡します。

于 2012-01-06T17:38:54.813 に答える