5

私はffを取得します。Javaコンソールで時折エラーが発生します:

Exception in thread "thread applet-my.package.MyApplet-10" java.lang.NoClassDefFoundError: another/package/SomeClass
    at my.package.MyApplet.init(MyApplet.java:95)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: another.package.SomeClass
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 3 more
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 7 more

私のアプレットタグは次のとおりです。

<applet codebase="../../applets" code="my.package.MyApplet" class="invisible" id="myApplet">
  <param value="value0" name="param0"/>
  ...
  <param value="valueN" name="paramN" />
  <param value="folder/myApplet__0.0.1177.jar,folder/commons-io-1.3.2__0.0.1177.jar,..." name="cache_archive"/>
  <param value="0.0.1177.0,0.0.1177.0,...," name="cache_version"/>
</applet>

「たまに」という言葉を強調することが重要です。アプレットが問題なく初期化される場合があります。これは、多くの場合、ブラウザを再起動すると問題が解決することも意味します。

アプレットがjarからクラスをロードできず、アプレットのクラスローダーがアプレットのjarでクラスを見つけることができないことを認識していますが、これらは私の場合には当てはまらないと思います。SomeClassとMyAppletは同じjarにあり、ページはローカルでアクセスされています。

4

2 に答える 2

1
Caused by: java.io.IOException: open HTTP connection failed:https://myserver/mycontext/applets/another/package/SomeClass.class

これは、HTTPS サーバーから jar ファイルを取得する際に接続の問題があるようです。

実行している Java のバージョンは正確にはわかりませんが、問題に関連する欠陥の理由をここで確認できます。

これが問題でない場合は、JAR ファイルのダウンロード時に十分なキャッシュがあることを確認してください。キャッシュがない場合、起動に失敗します。残念ながらコードの問題ではありません。

更新あなたのクラスは、SomeClassリモートサーバーまたはデータベースにアクセスしていますか?

AccessControl例外は、拒否された特権があることを明確に示しています。

at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)

アプレットは Flash オブジェクトに似ていることに注意してください。

  • どちらもクライアント側からダウンロードして実行します。

唯一の違いは、アプレットは、会社の DMZ (非武装地帯) の背後に隠されたサーバーに接続してはならないなど、多くのアクセス制御規則で設計されていることです。

その場合は、アプレットの外部でデータを取得する方法を見つけることをお勧めします (サーブレットを試してみませんか?)

更新 2 JVM は、署名済みの jar と一致する信頼できる証明書を見つけることができないようです。

  1. jar ファイルは署名されているため、jar ファイルが信頼できる証明書を指すことができることを確認してください (信頼できる必要があることに注意してください)。
  2. 詳細については、http: //faq.javaranch.com/java/HowCanAnAppletReadFilesOnTheLocalFileSystemおよびhttp://www.developer.com/article.php/3303561を確認してください。
于 2010-02-24T09:41:41.873 に答える
0

おそらくhttp://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.htmlと関係があります。つまり、1 つ以上の jar がプロバイダーを定義/期待します。時間のあるときに調べます。

于 2011-03-21T17:02:48.107 に答える