JimBob Jr.
JimBob Jr.

Reputation: 11

Java applet project "java.security.AccessControlException: access denied" error

This is my first applet project and for some reason when I try to run the applet I get this error.

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

But the code works perfect other than that. I am unsure what is causing this error. I am 2 days late on this assignment, and need someone to help me. I have been banging my head on the desk for hours.

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 CODE

<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”></object>
</font>
</body>
</html>

Upvotes: 1

Views: 7797

Answers (3)

Andrew Thompson
Andrew Thompson

Reputation: 168795

This appears to be a broken applet viewer installation to me. That code runs without error in applet viewer here (after I comment the line that does not compile, which implies that source is not what you are using). What happens when you try it in a Java enabled browser?

HTML

I don't think the HTML is relevant to the problem, but since you mentioned it:

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

I have 3 recommendations during testing.

  1. Swap object for applet
  2. Remove the .class extension of the code attribute - it is meant to be the fully qualified class name, not a file name. While the 2nd is usually tolerated, the 1st is correct.
  3. Change the 'smart quotes' for standard " style quotes. It looks like that HTML was prepared in a word processor. Or better still, remove the quotes completely.

E.G.

 <applet code=JRockPaperScissors width=435 height=290></applet>

Upvotes: 0

ipolevoy
ipolevoy

Reputation: 5518

Actually, signing applets was required for JDK 1.1, which came out in 1997. I would strongly not recommend diving into applet signing, this is a big can of worms. Current JVMs have permissions based security policy. If this is a quick hack, I recommend that you add one line of code to your JAVA_HOME/jre/lib/secirity/java.policy file:

permission java.lang.RuntimePermission "exitVM";

Make sure you add this to the default domain. Here is an example of my file in its entirety configured with permission to exit 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";
};

If you want, you can add all permissions by adding this line:

permission java.security.AllPermission;

In that case, your applet will run as a Java application, without any restrictions

Upvotes: 1

Summer_More_More_Tea
Summer_More_More_Tea

Reputation: 13346

For the sake of security, applet has limited priority to access your local disk.

To gain access right, you should sign your applet before publish(or running locally). Can't describe details, pls refer to this tutorial for howto do it.

Upvotes: 1

Related Questions