0

Java を更新した後に発生し始めた問題があります (私が思うに) Cpp サーバーに接続しようとすると (問題なく動作するようです)、ヘルプが見つからないエラー メッセージが表示されます。

以下はエラーメッセージです

java.security.AccessControlException: access denied
("java.net.SocketPermission" "127.0.0.1:4000" "connect,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.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 java.net.Socket.connect(Socket.java:574)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at jclientbare.init(jclientbare.java:27)
    at sun.applet.AppletPanel.run(AppletPanel.java:434)
    at java.lang.Thread.run(Thread.java:722)

Java ソース コードは次のとおりです。

import java.awt.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class jclientbare extends Applet {


    static BufferedReader in;
    static PrintStream out;

    public void init()  {

         try    {
                System.out.println("Test NN");
            Socket socket = new Socket( "localhost", 4000 );
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintStream( socket.getOutputStream(), true);
         }

         catch (UnknownHostException e) {

        JOptionPane.showMessageDialog(null, "Unknown Host..");
            System.out.println("Unknown host: kq6py");

           } catch  (IOException e) {

        JOptionPane.showMessageDialog(null, "NO IO.");
            System.out.println("No I/O");
         }
     }

}

Java アプレットは接続を登録せず、エラー メッセージを表示するだけです。どんな助けでも大歓迎です!java.policy に問題があるのではないかと思いますが、正確な修正方法がわかりません。

ええと、どうやってスタック トレースを行うのですか?

4

3 に答える 3

2

許可を与えるためにこれを試してください:

grant 
{
  permission java.net.SocketPermission 
  "127.0.0.1:4000", "connect,resolve";
};

アクセス許可の付与の詳細については、次のリンクを確認してください: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

この記事では、ポリシー ファイルの場所と、特定のポリシー ファイルを使用してアプリケーションを実行する方法について説明しています。

次のリンクでは、ポリシー ファイルの場所とポリシー ファイルがロードされる順序について詳しく説明しています

私が理解している限り、Windows を使用している場合は、「.java.policy」ファイルを「マイ ドキュメント」フォルダに配置できます。ブラウザでアプレットを実行すると、このポリシー ファイルがユーザー ポリシー ファイルとして検出されます。

于 2012-09-10T04:12:45.013 に答える
2
System.exit(1);

信頼できるアプレットでも を呼び出すことはできませんSystem.exit(int)。セキュリティ マネージャを持たないアプレットは、VM の終了を要求するべきではありません。ゲストがゲストハウスを焼き払うようなものです。

次のようなことをする方が良いでしょう:

URL crash = new URL(getCodeBase(), "crash.html");
getAppletContext().showDocument(crash);

ポリシーファイルに関するものは無視してください。それらは、現実世界 (野生のウェブ) への展開については何も解決しません。

于 2012-09-10T05:53:30.067 に答える
0

あはは!クラス ファイルを送信したのと同じソースでアプレットを実行できないことを知りました。Lighttpd をインストールした後、アプレットにアクセスできますhttp://localhost/index.htm。これが他の人に役立つことを願っています!

于 2012-09-10T14:18:04.280 に答える