0

JFrame をアプレットに変換すると、セキュリティ例外が発生します。

C:\prv_workspace_8\DungeonWorldAdventure\bin>appletviewer applet.html
java.security.AccessControlException: access denied ("java.net.SocketPermission"
 "www.student.nada.kth.se:80" "connect,resolve")
        at java.security.AccessControlContext.checkPermission(AccessControlConte
xt.java:366)
        at java.security.AccessController.checkPermission(AccessController.java:
555)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:456)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:203)
        at sun.net.www.http.HttpClient.New(HttpClient.java:290)
        at sun.net.www.http.HttpClient.New(HttpClient.java:306)

URL から写真を読み取ろうとしています:

// Load an image from the net, making sure it has already been
    // loaded when the method returns
    public Image loadPicture(String imageName) {
        Image im = null;

        // Load the image from the net
        try {
            URL imageSource = new URL(
                    "http://www.student.nada.kth.se/~d99-nro/" + imageName);

            try {
                im = createImage((ImageProducer) imageSource.getContent());
            } catch (IOException e) {
            }

        } catch (MalformedURLException e) {
        }

        // Wait to ensure that the image is loaded
        MediaTracker imageTracker = new MediaTracker(this);
        imageTracker.addImage(im, 0);
        try {
            imageTracker.waitForID(0);
        } catch (InterruptedException e) {
        }

        return im;
    }

どうすればこれを機能させることができますか?ファイルは必要java.policyですか?その場合、このアプレットを Web ページで機能させるにはどうすればよいですか?

4

1 に答える 1

3

どうすればこれを機能させることができますか?

クロスドメインを読み取るには、アプレットが信頼されている必要があります。それか、ドメイン間アクセスを許可する外部サーバー上の特定の場所にあるファイルのいずれかですが、アプレット ビューアーが区別できるほど洗練されているとは思えないので、Web ページでテストするのが最善でしょう。

クロスドメイン アクセスの詳細については、次を参照してください。

java.policyfile は必要ですか?

いいえ。それはネット上で展開するのにはうまくいかない (実用的ではない) ため、追求する価値はありません。


JFrame をアプレットに変換しています。

Java Web Startを使用してフレームを起動することをお勧めします。同じセキュリティ制限が適用されますが、画像の表示には通常、フリー フローティング (およびサイズ変更可能) フレームの方が適しています。また、コード変換が不要で、一般的に保守が容易です。アプレットは、JWS アプリよりも保守の問題を引き起こします。

Java Web Startで作ってみます。アプリケーションに署名を付けると、ファイルを読み取ることができると読みました。それは簡単であるべきではありませんか?他の開発者がアプレットでファイルをロードするのに苦労し、署名付きアプレットを使用するように勧められたのを見てきました。

ほとんど同じです。Jar は、任意の起動ファイル ( JNLP、HTML の要素に似ていappletますが、より多くのオプションがある) または拡張アクセス許可を要求する拡張機能 (JNLP) で参照される場合、デジタル署名する必要があります (3 つのレベルがあります)。または JWS の特権)。

もう 1 つの方法は、JNLP API ファイル サービスを使用してサンドボックス アプリからローカル ファイル システムにアクセスすることですが、その場合はコードを変更する必要があります。これがデモです。ファイル サービスの.

于 2012-07-04T07:31:46.700 に答える