プロが教えるわが家の防犯対策術!

クライアントのローカルフォルダに格納されているJarファイルを
Javaアプレットから呼び出して使用することは可能でしょうか?

クライアントにC:\Applet\lib\app-test.jarの様に、jarファイルが格納されているとして、
Javaアプレットからこのjarを使用しようするには、どのような設定が必要でしょうか?

現在は、NoClassDefFoundErrorになってしまいます。

eclipseで開発するときは、ビルドパスに上記パスを設定するので、問題なく動作します。

また、app-test.jarをC:\Program Files\Java\jre1.5.0_22\lib\extフォルダに格納すれば、
正常に動作します。

CLASSPATHを設定すれば良いのかと思い、C:\Applet\lib\app-test.jarを
クライアントの環境変数(CLASSPATH)に登録しましたが、同じエラーが発生します。

C:\Applet\lib\app-test.jarを利用するために必要設定(環境変数、HTMLのobjectタグ、
java.policyなど)があれば教えてください。

以上

A 回答 (4件)

テストに使ったコードはこんな感じです。



try {
File jarFile = new File("/tmp/app-test.jar");
URL[] urls = new URL[] { jarFile.toURI().toURL() };
ClassLoader parent = ClassLoader.getSystemClassLoader();
URLClassLoader ucl = new URLClassLoader(urls, parent);
Class cls = ucl.loadClass("Class1");
後はリフレクションを使ってメソッドを呼ぶなり何なりお好きにどうぞ
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

Class1がapp-test.jar内の他のクラスを必要とする場合は、明示的にloadClass()を呼ばなくても自動的にロードされます。

java.policyは面倒だったので何でもアリにしました。
grant {
permission java.security.AllPermission;
};

この回答への補足

サンプルの掲載ありがとうございます。
確かにURLClassLoaderを使用したやり方で、出来ました!

自分でも色々試した結果を報告すると、下記のようにOBJECTタグのarchiveに
ローカルjarのファイルパスを指定すると、エラーが発生せずにクラスを
読み込むことが出来ました。

<OBJECT classid="clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA" width="0" height="0">
<PARAM name="code" value="Class1.class">
<PARAM name="codebase" value="./applet/">
<PARAM name="archive" value="file:///C:\Applet\lib\app-test.jar">
</OBJECT>

他にもやり方はあるのかもしれませんが、今のところ、
URLClassLoaderを使用するか、archiveに指定するかどちらかですかね。

補足日時:2011/11/08 00:43
    • good
    • 0

ANo.2の者ですが、アプレットの中でURLClassLoaderを使う方法でローカルのjarファイルからクラスを読み込むことができることは確認しました。

この回答への補足

回答ありがとうございます。
そういうやり方があるんですね。
明日、こちらの環境でも試して見たいと思います。

よろしければ、試して頂いたソースをサンプルとして掲載して
頂けると助かります。

補足日時:2011/11/06 23:22
    • good
    • 0

> アプレットのクラスファイルはwebサーバーにあり、


> アプレットから利用するjarがクライアントのローカルフォルダにある

もしできるとすれば
・java.policyによってローカルファイルへのアクセスを許可する
・アプレットの中でURLClassLoaderを使い、app-test.jarから必要なクラスをロードする
という手順が考えられます。
実際に試してはいないので、この方法でもセキュリティによって阻まれるかもしれません。
    • good
    • 0

検索してから質問しよう。


大抵の枯れた技術はサンプルいっぱいある。

http://www.ne.jp/asahi/hishidama/home/tech/java/ …

この回答への補足

リンク先のどの部分でしょうか?

補足すると、アプレットのクラスファイルは
はwebサーバーにあり、アプレットから利用する
jarがクライアントのローカルフォルダにある
ということです。

補足日時:2011/11/02 22:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!