如何从JarClassLoader和Applet Launcher中调用applet中的方法,该方法返回字符串数据

时间:2013-07-03 14:07:24

标签: java javascript applet classloader

我正在尝试调用Applet1中的一个方法,这是我用来调用这个applet的JarClassLoader的主applet。还有一个AppletLauncher applet,我从那里启动Applet。我的代码是这样的。

public class AppletLauncher extends JApplet {
private JarClassLoader jcl;
public void init() {
    System.setProperty("JarClassLoader.logger.level", "INFO");
    System.setProperty("JarClassLoader.logger.area", "JAR,NATIVE,RESOURCE");
    jcl = new JarClassLoader();
    try {
        jcl.initApplet("Applet1", this);
    } catch (Throwable e) {
        e.printStackTrace();
    }
}
public String method3()
{

    String a = jcl.method2();
    return a;
}
}

我的JarClassLoader看起来像这样..

public class JarClassLoader extends ClassLoader {
public void initApplet(String sClass, final JApplet appletParent) throws Throwable {
    Class<?> clazz = loadClass(sClass);
    logInfo(LogArea.CONFIG, "initApplet() --> %s.init(); Loader: %s", sClass, clazz.getClassLoader());
    applet = (JApplet)clazz.newInstance();
    applet.setStub(new AppletStub() {
 applet.init();
    appletParent.setContentPane(applet.getContentPane());
......}
public String method2()
{
    How to call method method1 in Applet1.as class is already loaded as show in above code.     
}

我尝试过使用反射但没有工作......是不是我们可以用其他任何方式调用。 我已经从http://www.jdotsoft.com/JarClassLoader.php..For JarClassLoader引用了包装dll文件。

我的主Applet看起来像这样......

public class Applet1 extends JApplet 
{ 
 ......

public String method1()
{
    return abc;
} 
}

请告诉我如何处理此问题...调用方法。最后我正在制作一个jar文件并将其包含在xhtml页面中并使用javascript调用它。

1 个答案:

答案 0 :(得分:1)

您需要使用Class.forName的三参数来指定您正在使用的类加载器。 (单参数形式使用直接调用类的类加载器,这有点顽皮。)

请注意,使用Java加载远程代码很难安全地进行。