私が開発した Java 署名付きアプレット内から Javascript 関数を呼び出そうとしています。これは、Sun Java プラグインを備えたブラウザーを使用するとうまくいきます。Windows 7 と Ubuntu 10.04 で、Firefox、Chrome、および Internet Explorer (Windows) ブラウザーをテストしました。
Iced Tea プラグインを使用して任意のブラウザーで同じコードを実行しようとすると、次のエラーが通知されます。
net.sourceforge.jnlp.LaunchException: 致命的: 初期化エラー: アプレットを初期化できませんでした。net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:735) で net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:676) で net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java :886) 原因: java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206) の net.sourceforge.jnlp.runtime.JNLPClassLoader.getPermissions(JNLPClassLoader.java:915) での java.lang.NullPointerException。 SecureClassLoader.defineClass(SecureClassLoader.java:142) で java.net.URLClassLoader.defineClass(URLClassLoader.java:447) で java.net.URLClassLoader.access$100(URLClassLoader.java:71) で java.net.URLClassLoader$1.run で(URLClassLoader.java:361) java.net.URLClassLoader$1 で。
私が試した設定とこと:
Iced Tea プラグインで使用している Linux フレーバーは Ubuntu 12.04 です。
Sun JDK 6 および 7 と Open JDK 6 および 7 でコードをコンパイルしようとしましたが、どちらもブラウザーの Iced Tea プラグインで失敗します。
Iced Tea バージョン 6 とバージョン 7 でコードを試しました
Ubuntu の Firefox および Chrome ブラウザでコードを試してみました
コード スニペット:
HTML (本文タグ内):
<!-- JavaScript File That Contains My Javascript Function -->
<script type="text/javascript" src="./my_javascript_file.js"></script>
<!-- Applet That Will Call My Javascript Function -->
<object height="1" width="1" id="MyApplet" name="MyApplet"
java_version="1.5+" type="application/x-java-applet">
<param name="code" value="foo.MyApplet" />
<param name="archive" value="MyApplet.jar" />
<param name="JVM_PARAM" value="-Djava.security.policy=applet.policy" />
<param name="mayscript" value="true" />
<param name="scriptable" value="true" />
<param name="name" value="MyApplet" />
</object>
私が呼び出そうとしている Javascript メソッド (my_javascript_file.js 内):
window.performAppletCode = function (parameter_1) {
//Function code
}
「MyApplet.jar」内の Java アプレット コード (関連部分):
package foo;
import java.util.Arrays;
import javax.swing.JApplet;
import netscape.javascript.JSException;
import netscape.javascript.JSObject;
public class MyApplet extends JApplet {
//Parameter that will be sent to Javascript function
public String parameter_1;
//JSObject that will be responsible for accessing javascript on my page
public JSObject window = null;
private Thread myThread;
private ImportantClass importantClassInstance;
@Override
public void init() {
}
@Override
public void start() {
if (this.window == null) {
try {
this.window = JSObject.getWindow(this);
if (this.window == null){
System.out.println("Window is null");
}
}
catch (JSException jse) {
jse.printStackTrace();
}
fooStart();
}
}
public void fooStart() {
importantClassInstance = new ImportantClass();
// MyThread Section
myThread = new Thread(new Runnable() {
@Override
public void run() {
// Run latency test.
int[] fooArray = importantClassInstance.fooMethod();
parameter_1 = Arrays.toString(fooArray);
//Javascript function call
window.call("performAppletCode", new Object[] {parameter_1});
}
});
myThread.start();
}
}
アプレットは jarsigner を使用して署名されており、証明書は HTML ディレクトリに含まれています。
この問題を解決する手がかりを知っている人がいたら、教えてください。
ありがとう、ギエルメ。