1

これは私の最初のアプレット プロジェクトであり、何らかの理由でアプレットを実行しようとすると、このエラーが発生します。

Warning: Can't read AppletViewer properties file: 
    C:\Users\students\.hotjava\properties Using defaults.
java.security.AccessControlException: access denied (
    "java.lang.RuntimePermission" "exitVM.0")

しかし、コードはそれ以外は完璧に機能します。このエラーの原因がわかりません。私はこの任務に 2 日遅れており、助けてくれる人が必要です。私は何時間も机に頭をぶつけていました。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
import javax.swing.JApplet;


/** rock paper scissors class */
public class JRockPaperScissors extends JApplet{
    // Variables declaration
    private JLabel titleLbl;
private JLabel selectionLbl;
private JLabel resultsLbl;
private JTextArea resultTextArea;
private JButton rockBn;
private JButton paperBn;
private JButton scissorBn;
private Container contentPane;
    private int cpu = 0;
    private int wins = 0;
    private int loses = 0;
    private int ties = 0;
    private final int CHOICE_MAX = 3;
    private final int ROCK = 0;
    private final int PAPER = 1;
    private final int SCISSORS = 2;
    private Random rand = new Random();
// End of variables declaration

public JRockPaperScissors(){
    initializeComponent();
}

    /** initializing componets */
private void initializeComponent()
{
    titleLbl = new JLabel();
    selectionLbl = new JLabel();
    resultsLbl = new JLabel();
    resultTextArea = new JTextArea();
    rockBn = new JButton();
    paperBn = new JButton();
    scissorBn = new JButton();
    contentPane = getContentPane();

    //
    // titleLbl
    //
    titleLbl.setText("Rock, Paper, Scissors");
            titleLbl.setFont(new Font("Garrmond", Font.BOLD, 30));
    //
    // selectionLbl
    //
    selectionLbl.setText("Choose one");
            selectionLbl.setFont(new Font("Arial",Font.BOLD,14));
    //
    // resultsLbl
    //
    resultsLbl.setText("*****Results*****");
            selectionLbl.setFont(new Font("Arial",Font.BOLD,14));
    //
    // resultTextArea
    //
    resultTextArea.setOpaque(false);
    resultTextArea.setBackground(new Color(236, 233, 216));

    //
    // rockBn
    //
    rockBn.setText("Rock");
    rockBn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            rockBn_actionPerformed(e);
        }

    });
    //
    // paperBn
    //
    paperBn.setText("Paper");
    paperBn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            paperBn_actionPerformed(e);
        }

    });
    //
    // scissorBn
    //
    scissorBn.setText("Scissors");               
    scissorBn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            scissorBn_actionPerformed(e);
        }

    });
    //
    // contentPane
    //
    contentPane.setLayout(null);
    addComponent(contentPane, titleLbl, 5,9,370,47);
    addComponent(contentPane, selectionLbl, 9,54,150,35);
    addComponent(contentPane, resultsLbl, 9,93,144,38);
    addComponent(contentPane, resultTextArea, 5,132,398,111);
    addComponent(contentPane, rockBn, 162,58,78,31);
    addComponent(contentPane, paperBn, 247,58,81,31);
    addComponent(contentPane, scissorBn, 334,58,87,31);
    contentPane.setSize(new Dimension(435, 290));
    //
    // JRockPaperScissors
    //      
    setTitle("Paper Rock Scissors");
    setSize(435, 290);
    setVisible(true);
}

/** Add Component Without a Layout Manager (Absolute Positioning) */
private void addComponent(Container container,Component c,int x,int y,int width,int height)
{
    c.setBounds(x,y,width,height);
    container.add(c);
}

/** action event methods */
private void rockBn_actionPerformed(ActionEvent e)
{
        //play the game choosing rock
        play(ROCK);
}

private void paperBn_actionPerformed(ActionEvent e)
{
        //play the game choosing paper
        play(PAPER);
}

private void scissorBn_actionPerformed(ActionEvent e)
{
        //play the game choosing scissors
        play(SCISSORS);
}
    //method to play the game
    private void play(int pick){
         String resultStr = "";                   
         //random computer choice
         cpu = rand.nextInt(CHOICE_MAX);
         //nested if statments to determine winner loser or tie
         if(pick == cpu){
             ties++;
             resultStr = "You picked " + selection(pick) + " ---- Computer picked " + selection(cpu);
             resultStr += "\nWinner: Tie";
             resultStr += "\nYou: " + Integer.toString(wins) + "  " + "Computer: " + Integer.toString(loses) + " Ties: " + Integer.toString(ties);
             resultTextArea.setText(resultStr);
         }
         else if( (pick == ROCK) && (cpu == SCISSORS) ){
             wins++;
             resultStr = "You picked " + selection(pick) + " ---- Computer picked " + selection(cpu);
             resultStr += "\nWinner: You";
             resultStr += "\nYou: " + Integer.toString(wins) + "  " + "Computer: " + Integer.toString(loses) + " Ties: " + Integer.toString(ties);
             resultTextArea.setText(resultStr);
         }
         else if( (pick == PAPER) && (cpu == ROCK) ){
             wins++;
             resultStr = "You picked " + selection(pick) + " ---- Computer picked " + selection(cpu);
             resultStr += "\nWinner: You";
             resultStr += "\nYou: " + Integer.toString(wins) + "  " + "Computer: " + Integer.toString(loses) + " Ties: " + Integer.toString(ties);
             resultTextArea.setText(resultStr);                 
         }
         else if( (pick == SCISSORS) && (cpu == PAPER) ){
             wins++;
             resultStr = "You picked " + selection(pick) + " ---- Computer picked " + selection(cpu);
             resultStr += "\nWinner: You";
             resultStr += "\nYou: " + Integer.toString(wins) + "  " + "Computer: " + Integer.toString(loses) + " Ties: " + Integer.toString(ties);
             resultTextArea.setText(resultStr);
         }
         else{
             loses++;
             resultStr = "You picked " + selection(pick) + " ---- Computer picked " + selection(cpu);
             resultStr += "\nWinner: Computer";
             resultStr += "\nYou: " + Integer.toString(wins) + "  " + "Computer: " + Integer.toString(loses) + " Ties: " + Integer.toString(ties);
             resultTextArea.setText(resultStr);                 
         }

    }
        //function returns paper rock or scissors as a string
         public String selection(int choice){
             String tempStr;
             switch(choice){
               case 0:
                     tempStr = "rock";
                     break;
               case 1:
                     tempStr = "paper";
                     break;
               case 2:
                     tempStr = "scissors";
                     break;
               default:
                     tempStr = "invalid";
              }
              return tempStr;
         }

}

HTMLコード

<html>
<head><title>Rock Paper Scissors</title></head>
<body bgcolor="black">
<font color="yellow"><center><h1>Welcome!! Ready to play?</h1></center>
<p><b><object code = “JRockPaperScissors.class” width = “435” height = “290”&gt;</object>
</font>
</body>
</html>
4

3 に答える 3

1

セキュリティ上の理由から、アプレットはローカルディスクにアクセスするための優先度が制限されています。

アクセス権を取得するには、公開する(またはローカルで実行する)前にアプレットに署名する必要があります。詳細を説明することはできません、plsはそれを行う方法についてこのチュートリアルを参照してください。

于 2012-04-09T16:53:45.137 に答える
1

実際、1997 年にリリースされた JDK 1.1 では、署名アプレットが必要でした。アプレット署名に飛び込むことは強くお勧めしません。現在の JVM には、パーミッション ベースのセキュリティ ポリシーがあります。これが簡単なハックである場合は、JAVA_HOME/jre/lib/secirity/java.policy ファイルに 1 行のコードを追加することをお勧めします。

permission java.lang.RuntimePermission "exitVM";

これをデフォルトのドメインに必ず追加してください。以下は、JVM を終了する権限で構成されたファイル全体の例です。

grant codeBase "file:/home/igor/programs/jdk1.6.0_24/jre/lib/ext/*" {
  permission java.security.AllPermission;
};

grant codeBase "file:/usr/java/packages/lib/ext/*" {
  permission java.security.AllPermission;
};

grant {
  permission java.lang.RuntimePermission "stopThread";
  permission java.net.SocketPermission "localhost:1024-", "listen";
  permission java.util.PropertyPermission "java.version", "read";
  permission java.util.PropertyPermission "java.vendor", "read";
  permission java.util.PropertyPermission "java.vendor.url", "read";
  permission java.util.PropertyPermission "java.class.version", "read";
  permission java.util.PropertyPermission "os.name", "read";
  permission java.util.PropertyPermission "os.version", "read";
  permission java.util.PropertyPermission "os.arch", "read";
  permission java.util.PropertyPermission "file.separator", "read";
  permission java.util.PropertyPermission "path.separator", "read";
  permission java.util.PropertyPermission "line.separator", "read";
  permission java.util.PropertyPermission "java.specification.version", "read";
  permission java.util.PropertyPermission "java.specification.vendor", "read";
  permission java.util.PropertyPermission "java.specification.name", "read";
  permission java.util.PropertyPermission "java.vm.specification.version", "read";
  permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
  permission java.util.PropertyPermission "java.vm.specification.name", "read";
  permission java.util.PropertyPermission "java.vm.version", "read";
  permission java.util.PropertyPermission "java.vm.vendor", "read";
  permission java.util.PropertyPermission "java.vm.name", "read";
  permission java.lang.RuntimePermission "exitVM";
};

必要に応じて、次の行を追加してすべての権限を追加できます。

permission java.security.AllPermission;

その場合、アプレットは制限なしで Java アプリケーションとして実行されます。

于 2012-04-09T17:05:15.757 に答える
0

これは、アプレット ビューアのインストールが壊れているように見えます。そのコードは、ここのアプレット ビューアーでエラーなしで実行されます (コンパイルされない行にコメントした後、ソースが使用しているものではないことを意味します)。Java 対応のブラウザーで試してみるとどうなりますか?

HTML

HTMLが問題に関連しているとは思いませんが、あなたが言及したので:

<object code = “JRockPaperScissors.class” width = “435” height = “290”&gt;</object>

テスト中に 3 つの推奨事項があります。

  1. 交換objectするapplet
  2. code 属性の拡張子を削除し.classます。これは、ファイル名ではなく、完全修飾クラス名であることを意味します。通常、2 番目は許容されますが、1 番目は正しいです。
  3. 標準の " スタイルの引用の「スマート引用」を変更します。HTML はワープロで作成されたようです。または、引用を完全に削除してください。

例えば

 <applet code=JRockPaperScissors width=435 height=290></applet>
于 2012-04-09T17:30:00.427 に答える