...

View Full Version : Java applet project - java.security.AccessControlException: access denied



nanoashash
04-09-2012, 05:59 PM
This program I wrote in java is a rock paper scissors game. Its done in a gui and suppose to run as an applet. I have been stuck on this problem for 2 days now. I can not figure out what is giving me the error. When I try to run this applet this is what I get.



java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "exitVM.0")
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.checkExit(SecurityManager.java:761)
at javax.swing.JFrame.setDefaultCloseOperation(JFrame.java:394)
at JRockPaperScissors.initializeComponent(JRockPaperScissors.java:115)
at JRockPaperScissors.<init>(JRockPaperScissors.java:31)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:795)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:724)
at sun.applet.AppletPanel.run(AppletPanel.java:378)
at java.lang.Thread.run(Thread.java:722)

My code works fine, but I guess it is doing something that applet is not liking. Here is the code to my game.



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);


//
// 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;
}

}



I do not understand what I am doing wrong that will require permissions...

Fou-Lu
04-10-2012, 08:14 PM
That's interesting. According to this you need security to issue a setTitle command. First I'd try is to remove that line, and see what it does.
I thought they only things that you would require signed applets for were using IO and like (classloaders, runtime resource handling, external stuff more or less). I would *not* expect that setTitle would be the cause, but that is clearly what I have on line 115 here.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum