Reputation: 11
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
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?
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.
object
for applet
.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. <applet code=JRockPaperScissors width=435 height=290></applet>
Upvotes: 0
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
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