【发布时间】:2012-08-26 23:16:20
【问题描述】:
我正在从 Herbert Schildt Book Java2 Complete Reference Fifth Edition 逐步学习 Java。在我通过创建线程并调用 Applet 的 Repaint() 方法来创建显示横幅并在 Applet 查看器上滚动它的简单横幅 Applet 的过程中。但是在创建可运行目标的线程对象时,它会抛出这样的异常
java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:345)
at java.security.AccessController.checkPermission(AccessController.java:555)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at sun.applet.AppletSecurity.checkAccess(AppletSecurity.java:252)
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:304)
at java.lang.ThreadGroup.<init>(ThreadGroup.java:119)
at java.lang.ThreadGroup.<init>(ThreadGroup.java:95)
at Applet.SimpleBanner.start(SimpleBanner.java:49)
at sun.applet.AppletPanel.run(AppletPanel.java:475)
at java.lang.Thread.run(Thread.java:713)
我读到其他文章说它需要安全权限,但在我的 applet.policy 文件中已经允许所有权限
grant { permission java.security.AllPermission;};
这只是我的第二个小程序。谁能用简单的语言详细解释一下为什么是 Throwing Security Exception 及其解决方案?
这是我的小程序代码。
import java.applet.Applet;
import java.awt.*;
/* A Simple Banner Applet.
* This Banner Applet Creates a thread that scrolls the message contained
* in msg right to left across banner's window.
*/
/*
* <applet code="SimpleBanner" width=300 height=50>
* </applet>
*/
public class SimpleBanner extends Applet implements Runnable{
private static final long serialVersionUID = 1L;
String msg = "Hello World";
Thread t = null;
ThreadGroup Grp;
int state;
boolean stopflag;
/**
* Initialization method that will be called after the applet is loaded into
* the browser.
*/
@Override
public void init()
{
//Set Foreground and background color
setBackground(Color.cyan);
setForeground(Color.red);
}
@Override
public void start()
{
//Start Thread
Grp = new ThreadGroup("Group");
t = new Thread(Grp, this);
stopflag = false;
t.start();
}
//Entry Point for Thread that Runs The banner
@Override
public void run()
{
char ch;
//Display Banner
for(;;)
{
try {
repaint();
Thread.sleep(250);
ch=msg.charAt(0);
msg =msg.substring(1,msg.length());
msg +=ch;
if (stopflag)
{
break;
}
} catch (InterruptedException ex) {
}
}
}
@Override
public void stop()
{
// Pause The Banner
stopflag=true;
t=null;
}
@Override
public void paint(Graphics g)
{
//Display The Banner
g.drawString(msg, 50, 30);
}
}
【问题讨论】:
-
在第三个千年,我们会这样做:1) 使用 Swing。 2) 使用
javax.swing.Timer进行动画处理 3) ..如果它在网页中,请忽略所有这些并使用 HTML 5 画布进行渲染,使用 JavaScript 来控制动画。 -
"谁能用详细解释为什么会抛出安全异常及其简单术语的解决方案?" 如果我们详细解释它不能简单。任选其一。
-
顺便说一句。令人担忧的是,这本书声称涵盖了引入 Swing(例如
JApplet)的“Java 2”,同时似乎导致了扎根于 AWT 的代码示例(Applet)。 -
运行此示例不需要
ThreadGroup。尝试删除该类的使用。
标签: java multithreading applet accesscontrolexception