Java小程序项目“;java.security.AccessControlException:拒绝访问;错误
这是我的第一个小程序项目,由于某种原因,当我尝试运行小程序时,我会出现此错误Java小程序项目“;java.security.AccessControlException:拒绝访问;错误,java,applet,Java,Applet,这是我的第一个小程序项目,由于某种原因,当我尝试运行小程序时,我会出现此错误 Warning: Can't read AppletViewer properties file: C:\Users\students\.hotjava\properties Using defaults. java.security.AccessControlException: access denied ( "java.lang.RuntimePermission" "exitVM.0") 但
Warning: Can't read AppletViewer properties file:
C:\Users\students\.hotjava\properties Using defaults.
java.security.AccessControlException: access denied (
"java.lang.RuntimePermission" "exitVM.0")
但是代码工作得非常完美。我不确定是什么导致了这个错误。我这次作业迟到了两天,需要有人帮我。我已经用头撞桌子好几个小时了
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”></object>
</font>
</body>
</html>
石头剪子布
欢迎准备好比赛了吗?
为了安全起见,小程序访问本地磁盘的优先级有限
要获得访问权限,您应该在发布(或在本地运行)小程序之前对其进行签名。无法描述详细信息,请参阅了解如何操作。实际上,1997年推出的JDK1.1需要签署小程序。我强烈建议不要潜入applet签名,这是一个很大的漏洞。 当前JVM具有基于权限的安全策略。如果这是一个快速攻击,我建议您在JAVA_HOME/jre/lib/secirity/JAVA.policy文件中添加一行代码:
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应用程序运行,没有任何限制对我来说,这似乎是一个坏的小程序查看器安装。该代码在applet viewer中运行时没有错误(在我注释了未编译的行之后,这意味着源代码不是您正在使用的代码)。在支持Java的浏览器中尝试时会发生什么 HTML 我认为HTML与问题无关,但既然您提到了它:
<object code = “JRockPaperScissors.class” width = “435” height = “290”></object>
请在评论之前阅读例外详细信息。这与磁盘访问无关。我非常确定java已经启用。我要添加我正在使用的html代码。omg它是标题。。。爆笑。。。呃,我现在觉得自己很愚蠢。。。。谢谢你所做的一切!即使这个输出不是一条红鲱鱼(我怀疑是这样,请看我的答案),也要注意以下几点。小程序是网页中的“来宾”,可能与其他小程序共享VM。结束虚拟机有点像“烧毁宾馆”。另一方面,调整策略文件对于已部署的小程序来说是不实际的,数字签名本身不会使小程序能够结束VM。此外,如果您签署并接受小程序,杀死安全管理器,然后退出系统。退出(n),它可能会使浏览器本身崩溃。我亲眼目睹了这一切
<applet code=JRockPaperScissors width=435 height=290></applet>