2013-03-14 79 views
1

我正在製作一個遊戲,並且製作了一個可以從user.home目錄加載遊戲的JFrame加載器,但最近決定我想讓它在一個web applet中好。簽名applet加載簽名jar閱讀文件錯誤

當我運行JFrame加載器時,它成功加載遊戲,檢查文件並打開。 (包括遊戲和JFrame的簽署) 我可以加載並使用從Applet的罰款調用方法:

m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this); 

但隨後會出現以下錯誤,當小程序試圖加載它,它管理加載遊戲罰款但是,當它試圖用代碼來加載保存選項:

File f = new File(OS.saveDir + OS.fileSeparator + "Options.keys"); 
    if (!f.exists()) { 
     try { 
      f.createNewFile(); 
      saveKeys(); 
     } catch (IOException ex) { 
      Logger.getLogger(Configuration.class.getName()).log(Level.SEVERE, null, ex); 
     } 

它給了我下面的錯誤:

Mar 14, 2013 11:10:21 PM core.GameEngine run SEVERE: null java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Users\Jake.Zombies\Options.keys" "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.exists(Unknown Source) at core.Configuration.loadKeys(Configuration.java:123) at core.Configuration.onStartup(Configuration.java:105) at core.GameEngine.run(GameEngine.java:76)

隨着行,如果是Configura(f.exists()!) tion.java:123

我的問題是,它加載在JFrame中加載罰款(簽字),但不是小程序(簽名)

任何幫助非常感謝,謝謝。

編輯:小程序加載器檢查文件,並可以下載最新的罰款。只有當我問遊戲加載時,纔會加載遇到問題的文件。

編輯2(滿載代碼):

File folder = new File(saveDir); 
     URL u = new URL("jar:" + folder.toURI().toURL() + "Zombies.jar!/"); 
     URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{u}); 
     Class c = Class.forName("Visual.GameDisplay", true, ucl); 
     Method m = c.getMethod("main", String[].class, String[].class, java.sql.Connection.class, Component.class); 
     m.invoke(null, (Object) new String[]{textPack, font, currVersionStr,saveDir}, null, null, this); 

由剛開緩衝輸入流,然後將其寫入到的BufferedOutputStream寫入。

回答

2

http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

applet不允許任意的文件訪問。

實際上,如果從本地磁盤加載,則會有異常。這是如何加載的?

+0

謝謝,但我認爲只有當他們沒有簽名時,考慮到它可以製作和寫入文件? – Fallboo 2013-03-14 23:21:55

+0

簽名無關緊要。 – 2013-03-14 23:22:11

+0

我使用Netbeans生成的「launch.html」,我已經添加了關於如何加載其他jar的代碼,以及如何從Web下載文件並將它們存儲在文件夾中的小說明。 – Fallboo 2013-03-14 23:27:00

1

一個小程序不允許訪問用戶文件系統。您必須將數據保存回服務器。

0

混合信任和不信任的代碼是一個真正的想法。你可能正在加載任何東西。加載代碼的更安全的方法是通過javax.jnlp,自6u10開始應該可用於applet。請注意,在加載jar之前,你應該確保你沒有引用任何類,因爲你不會使用這些類名(它不會起用單獨的類加載器)。