1

私が開発した 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 ディレクトリに含まれています。

この問題を解決する手がかりを知っている人がいたら、教えてください。

ありがとう、ギエルメ。

4

2 に答える 2

1

JSから呼び出されると、アプレットは信頼を失います。これを修正するには、とこの回答を参照AccessController.doPrivileged(...)ください。

于 2012-07-18T01:55:42.643 に答える
0

解決策を見つけたと思いますが、なぜこれが起こるのかわかりません。つまりね:

OS Ubuntu にあるディレクトリから Web ページ (アプレットとその他すべてを含む) を開始すると、Java コンソールにクレイジーなエラーが表示されます。しかし、リモート サーバー (自宅の LAN 内の別のコンピューターなど) にあるディレクトリからページを開始すると、すべてが完璧に機能します。したがって、何らかの理由で、リモートサーバーから自分のページをリクエストして、すべてが正常に機能するようにする必要があります。これは、私の質問で説明した上記の状況でのみ発生します。どうしてこうなったのかネットで調べてみます。

于 2012-08-07T14:59:22.617 に答える