2013-08-17 56 views
0

你好,stackoverflow用户! 我想知道什么是错的,从我的Java小程序的代码:Java applet:如何摆脱这个java.io.EOFException?

for (int i = 0; i < 12; i++) 
    { 
     try { 
      JOptionPane.showMessageDialog(null, "CodeBase: " + getCodeBase()); 
      JOptionPane.showMessageDialog(null, "Earl: " + new URL(getCodeBase(), "../animation/MonkeyAnimX" + String.valueOf(i) + ".jpeg")); 
      preparedartwork[i] = getImage(new URL(getCodeBase(), "../animation/MonkeyAnimX" + String.valueOf(i) + ".jpeg")); 
     } catch (MalformedURLException ex) { 
      ex.printStackTrace(); 
     } 
    } 

当发生异常时,它说:

java.security.AccessControlException: access denied (java.io.FilePermission /var/www/animation/MonkeyAnimX0.jpeg read) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:399) 
at java.security.AccessController.checkPermission(AccessController.java:558) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
at java.lang.SecurityManager.checkRead(SecurityManager.java:888) 
at sun.awt.image.URLImageSource.<init>(URLImageSource.java:55) 
at sun.applet.AppletImageRef.reconstitute(AppletImageRef.java:51) 
at sun.misc.Ref.get(Ref.java:64) 
at sun.applet.AppletViewer.getCachedImage(AppletViewer.java:395) 
at sun.applet.AppletViewer.getImage(AppletViewer.java:390) 
at java.applet.Applet.getImage(Applet.java:259) 
at MonkeysTyping.init(MonkeysTyping.java:213) 
at sun.applet.AppletPanel.run(AppletPanel.java:437) 
at java.lang.Thread.run(Thread.java:679) 

要确保这个异常不能因为丢缺少的权利我改变了它,以便每个人和东西都有权使用这些文件。 ( - > cmod 777)我从教程中得到了这段代码,所以出了什么问题?

+0

小方面说明:构建字符串时不需要String.valueOf。这将编译时没有错误:'“../animation/MonkeyAnimX”+ i +“.jpeg”' – VGR

+0

这是一个Java安全功能,applet无法访问硬盘上的文件。 –

+0

如果通过本地主机或网络打开该页面并且相对路径正确,则应该可以正常工作。关于applets从*本地**磁盘启动的Java安全性***变得非常严格,以至于它不能代表沙盒小程序可以在网络或本地服务器上执行什么操作。顺便说一句 - 为什么编写一个小程序?如果这是由于规格。由老师,请参考[为什么CS老师应该停止教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)。 –

回答

0

问题不在于文件权限,而是由于applet的安全限制。以下是您需要覆盖SecurityManager使用的默认安全策略文件的内容。

1)创建一个文本文件(如applet.policy)

2)授予的所有权限小程序

grant { 
    permission java.security.AllPermission; 
    }; 

3)在与

-J-Djava.security.policy=applet.policy 

阅读小程序更多关于小程序安全性的信息,请访问:What Applets Can and Cannot Do

2

默认情况下,Applets不允许访问文件系统。当您将文件系统暴露给外部网络时,这是一个主要的安全风险。你可以阅读更多here

+0

是的,修好了。感谢您指出。 – rocketboy