Java Applet中的AccessControlException

时间:2012-06-24 04:32:12

标签: java security applet javax.imageio accesscontrolexception

我在网页中创建了一个小程序,但每当我运行它时,我都会得到这个:

Exception in thread "Thread-13" java.security.AccessControlException: access denied ("java.io.FilePermission" "defensebg.png" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.canRead(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at Defense.run(Defense.java:63)
    at java.lang.Thread.run(Unknown Source)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于我对您的applet了解不多,并且我确信这些图像是应用程序的固有部分,因此我将对paulms4采取不同的策略。

忘记File个实例。它们既不适用于此,也不是必需的。只有受信任的applet才能访问File,但即便如此,applet可以建立File的唯一位置是指向用户PC的文件系统上的位置。显然,applet的图像不可用(好的 - 它们可能在浏览器缓存中,但这对我们没用)。

通过URL访问applet资源会更为典型(也更容易)。可以相对于applet的代码库或文档库建立URL。如果图像实际上在Jar中,它们将成为embedded resource - 请参阅信息。关于如何获取网址的页面。

J2SE中加载“只读”资源的大多数方法都将接受FileURLInputStream。我最常使用URL作为它的泛型实用程序。 URL可以表示Web资源,本地文件系统上的文件或深埋在Jar文件内的资源(无论是在Web上还是在本地文件系统上)。

答案 1 :(得分:2)

  

问:我该如何解决这个问题?

答:呃 - 不要尝试从小程序中读取客户端PC上的文件吗?

或阅读"政策文件":

Java applet在安全的沙盒中运行"。这是设计 - 为了最终用户的安全: