2013-08-17 95 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