访问jarclassloader方法:java.security.AccessControlException:访问被拒绝

时间:2014-07-16 20:59:04

标签: java applet

这是我在尝试调用通过jarclassloader函数加载的applet中的函数时遇到的错误(第一行是由函数输出的,如在底部附近看到的那样)下面的代码)。

MyAppletLauncher:setdestination! Getting webcamclass ...
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "setContextClassLoader")
    at java.security.AccessControlContext.checkPermission(Unknown Source)

小程序加载和运行正常。下面代码底部附近的例程setImageDestination()就是它死亡的地方。我通过点击按钮(用于测试)从javascript调用函数setImageDestination()。我以为我在下面的代码中误用了initApplet("webcam",this)中的变量jcl:

import javax.swing.JApplet;
import java.lang.reflect.*;

public class MyAppletLauncher extends JApplet {

    private JarClassLoader jcl;

    @Override
    public void init() {
        jcl = new JarClassLoader();
        try {
            jcl.initApplet("webcam", this);
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    @Override
    public void start() {
        jcl.startApplet();
    }

    @Override
    public void stop() {
        jcl.stopApplet();
    }

    @Override
    public void destroy() {
        jcl.destroyApplet();
    }


    public void setImageDestination(String url, int type, int p1, int p2)
     {
       try {
        System.out.println("MyAppletLauncher:setdestination! Getting webcamclass ...");  
        Class webcamclass=jcl.loadClass("webcam");
        System.out.println("   Have webcamclass ... getting method ...");    
        Method m=webcamclass.getMethod("WebcamImageDestination",String[].class);
        System.out.println("   Have method ... invoking ...");   
        m.invoke(jcl,url,type,p1,p2);
        System.out.println("   Invoked.");   
        }
      catch (Exception e) {
         e.printStackTrace();
       }    
     } 

} // class MyAppletLauncher

1 个答案:

答案 0 :(得分:0)

我需要在JAR中添加一个清单条目:

caller-allowable-codebase:*