JNLP を使用して jar ファイルを起動しようとしたときに問題が発生しました。以前、JNLP なしで問題なくアプレットを起動しました。jnlp ファイルと一緒に同じディレクトリに保持されている 3 つの異なる jar を起動します。すべての jar がダウンロードされますが、外部 jar の 1 つ (つまり、メインの jar ではないもの) からクラスをロードしようとするとすぐに classNotFoundError が表示されます。アプリケーションはこれが発生するまで実行されるため、メインの jar が実行されているように見えます。JNLP ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" href="/jars/file.jnlp">
<information>
<title>Client</title>
<vendor>My Vendor</vendor>
<description>Description</description>
<description kind="short">Desc</description>
<offline-allowed />
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.6+" />
<jar href="mainJar.jar" main="true" download="eager"/>
<jar href="extJar1.jar" main="false" download="eager"/>
<jar href="extJar2.jar" main="false" download="eager" />
</resources>
<applet-desc
name="MyApp"
main-class="path-to-main-class"
width="1"
height="1">
</applet-desc>
</jnlp>
アプレットは、次のように HTML ファイルから起動されます。
<applet
code="com.mycompany.net.MyMainClass"
name="MyApp"
archive="/jars/extJar1.jar, /jars/extJar2.jar, /jars/mainJar.jar"
id="myId"
width="1"
height="1"
mayscript
alt="The java plugin must be installed.">
<param name="jnlp_href" value="/jars/file.jnlp"/>
Java 1.5 or higher required.
</applet>
Janela で jnlp をチェックしたところ、エラーは発生しませんでした。jnlp ファイルがなくても、Eclipse からアプレットを実行できます。また、ファイルまたはファイルへの URL を指定して、javaws から jnlp ファイルを開くこともできます。そのため、間違っているのはhtmlだと思います。ただし、これは私が得た限りです。次のJavaScriptで起動しようとしましたが、同じ結果になりました:
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {
id:'myId',
code:'com.mycompany.net.MyMainClass',
width:1,
height:1,
name:"MyApp"
};
var parameters = {
jnlp_href:"/jars/file.jnlp",
archive:"/jars/extJar1.jar, /jars/extJar2.jar, /jars/mainJar.jar",
};
deployJava.runApplet(attributes, parameters, '1.6');