如何从JAR文件中确定Java applet的入口点?

时间:2013-12-13 01:22:52

标签: java japplet

有没有办法确定只给出jar文件的java applet的起点?我正在尝试创建一个网站,我可以上传applet的jar文件,然后使用类似于以下内容的方式播放。

<object type="application/x-java-applet" height="450" width="450">
  <param name="code" value="<? echo $startingClass; ?>" />
  <param name="archive" value="<? echo $jarUrl; ?>" />
  Applet failed to run.
</object>

我得到的小程序没有正确的清单或jnlp文件。我已经尝试使用jar -tvf'jarfile.jar'来获取jar文件中所有类的列表,但无法确定哪一个是入口点。

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

听起来很复杂。我认为这是必要的:

  1. 在服务器上上传jar之后,您需要一个自定义类加载器来加载服务器上的jar(请参阅Load jar dynamically)。
  2. 然后你可以使用Reflection在其中找到applet主类,
  3. 然后您将重定向到JSP,您可以在其中生成所需的<object>标记。

答案 1 :(得分:1)

  

..但无法确定哪一个是入口点。

使用类似:

if (exampleOfClass instanceof Applet) { // We're good to go!...

答案 2 :(得分:0)

以下是基于其他评论的部分解决方案,但我遇到了一个问题,即并非所有applet的子类都被识别(How can identify Applet subclasses from a Jar file?)。该程序将打印出Jar文件中作为Applet的子类的类。其中一个类(可能是派生程度最高的类)是入口点。

import java.applet.Applet;

public class JarAppletIdentifier 
{  
  public static void main(String [] args)
    throws Exception
  {
    for(String class_name : args) {
      class_name = class_name.replace(".class", "");

      Class<?> c = Class.forName(class_name);
      if(Applet.class.isAssignableFrom(c))
        System.out.println(class_name);
    }   
  }
}

此片段需要jar文件中的类列表作为参数。

使用linux,可以从jar文件中读取参数并使用

进行解析
// prints out, eg. 
//   pac.kage.Main.class
//   pac.kage.Other.class
//   user.pac.kage.SomeClass.class
jar_classes=$(jar -tf example.jar | 
  grep .class | grep -v "\\$" | grep -v "^\." | sed 's/\//\./g')

然后,您可以使用

将此结果传递给程序
echo $jar_classes | xargs java -classpath "example.jar" JarAppletIdentifier