2012-01-31 69 views
1

我做了一個Applet。這個applet完全適用於appletviewer。但是,當我將這個applet的類文件放在一個目錄中時,它與我在其中籤名的Jar File一起創建一個帶有applet標籤的.HTML文件,它不起作用。我一直得到java.security.AccessControlException: access denied。 我該如何做這項工作?這裏是源代碼,它下面的問題,再下面是小程序是如何嵌入:Java Applet不能使用HTML

import javax.swing.*; 
import java.applet.Applet; 
import java.applet.AppletContext; 
import java.applet.AppletStub; 
import java.awt.*; 
import java.io.*; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLClassLoader; 
import java.util.HashMap; 

public class RSLoad extends JApplet implements AppletStub { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private static final HashMap<String, String> PARAMETERS = new HashMap<String, String>(); 
private static final String LINK = "http://world2.runescape.com/"; 

public void init() { 
    try { 
     setVisible(true); 
     setSize(775, 540); 
     parse(LINK); 
     dwnld(LINK + PARAMETERS.get("archive")); 
     ClassLoader loader = new URLClassLoader(new URL[]{new File("Runescape.jar").toURI().toURL()}); 
     Class<?> client = loader.loadClass("Rs2Applet"); 
     Applet applet = (Applet) client.newInstance(); 
     applet.setStub(this); 
     applet.init(); 
     applet.start(); 
     add(applet, BorderLayout.CENTER); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void appletResize(int width, int height) { 
} 

public final String getParameter(String name) { 
    return PARAMETERS.get(name); 
} 
public final URL getDocumentBase() { 
    try { 
     return new URL(LINK); 
    } catch (MalformedURLException e) { 
     return null; 
    } 
} 

public final URL getCodeBase() { 
    try { 
     return new URL(LINK); 
    } catch (MalformedURLException e) { 
     return null; 
    } 
} 

public final AppletContext getAppletContext() { 
    return null; 
} 

private void parse(final String url) { 
    try { 
     BufferedReader in = new BufferedReader(new InputStreamReader(new URL(url).openStream())); 
     String line; 
     while ((line = in.readLine()) != null) { 
      if (line.contains("app") && line.contains("write")) { 
       PARAMETERS.put("<app", ""); 
       PARAMETERS.put("let ", ""); 
      } else if (line.contains("scriptsrc") || line.contains("ie6")) { 
      } else if (line.contains("document.write")) { 
       line = line.replaceAll("document.write", "").replaceAll("<param name=\"", "").replaceAll("\">'", "\"").replaceAll("'", "").replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("\"", "").replaceAll(" ", "").replaceAll(";", "").replaceAll("value", ""); 
       String[] splitted = line.split("="); 
       if (splitted.length == 1) { 
        PARAMETERS.put(splitted[0], ""); 
       } else if (splitted.length == 2) { 
        PARAMETERS.put(splitted[0], splitted[1]); 
       } else if (splitted.length == 3) { 
        PARAMETERS.put(splitted[0], splitted[1] + splitted[2]); 
       } 
      } 
     } 
     in.close(); 
    } catch (Exception e) { 
     System.out.println("Error Parsing!"); 
    } 
} 

private void dwnld(final String url) { 
    try { 
     BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); 
     FileOutputStream fos = new FileOutputStream("Runescape.jar"); 
     BufferedOutputStream out = new BufferedOutputStream(fos, 1024); 
     byte[] data = new byte[1024]; 
     int x; 
     while ((x = in.read(data, 0, 1024)) >= 0) { 
      out.write(data, 0, x); 
     } 
     in.close(); 
     out.close(); 
    } catch (Exception e) { 
     System.out.println("Error Downloading!"); 
     e.printStackTrace(); 
    } 
} 

}`

'java.security.AccessControlException: access denied (java.net.SocketPermission world2.runescape.com:80 connect,resolve) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
at java.security.AccessController.checkPermission(AccessController.java:546) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034) 
at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Applet2SecurityManager.java:505) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:528) 
at sun.net.www.http.HttpClient.<init>(HttpClient.java:234) 
at sun.net.www.http.HttpClient.New(HttpClient.java:307) 
at sun.net.www.http.HttpClient.New(HttpClient.java:324) 
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911) 
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172) 
at java.net.URL.openStream(URL.java:1010) 
at RSLoad.dwnld(RSLoad.java:95) 
at RSLoad.init(RSLoad.java:26) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1639) 
at java.lang.Thread.run(Thread.java:680) 
java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
at java.security.AccessController.checkPermission(AccessController.java:546) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285) 
at java.lang.System.getProperty(System.java:667) 
at java.io.UnixFileSystem.resolve(UnixFileSystem.java:118) 
at java.io.File.getAbsolutePath(File.java:501) 
at java.io.File.getAbsoluteFile(File.java:517) 
at java.io.File.toURI(File.java:660) 
at RSLoad.init(RSLoad.java:27) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1639) 
at java.lang.Thread.run(Thread.java:680) 

嵌入式這樣的:

<html> 
<body> 
<applet code=RSLoad.class archive="RSLoad.jar" width=100% height=100%> 
</applet> 
</body> 
</html> 
+0

您是否提示接受數字簽名的代碼?順便說一句 - 爲什麼編寫一個小程序而不是框架? – 2012-02-01 03:09:55

+0

我被提示接受代碼,我正在爲特殊項目做一個小程序。 – DarkGhoul45 2012-02-01 03:42:58

+0

*「我被提示簽署代碼」*我詢問您是否被提示接受***簽名的代碼。 *「我正在做一個特殊項目的小程序。」*這不能回答我的問題。爲什麼使用applet而不是框架?這個特殊項目需要一個applet(具體)是什麼? – 2012-02-01 03:46:33

回答

0

您的證書在瀏覽器中不受信任,或者用戶沒有給出明確的許可。你已經給了我們代碼(絕對是件好事),但沒有任何關於簽名本身,瀏覽器或你嵌入applet的方式。

+0

我我會稍微補充一點,請回頭看看。感謝所有試圖幫助我的人。 – DarkGhoul45 2012-02-01 03:44:13