2013-12-13 2 views
0

jar 파일 만 주어진 Java 애플릿의 시작점을 결정하는 방법이 있습니까? 애플릿의 jar 파일을 업로드 할 수있는 웹 사이트를 만들고 다음과 비슷한 내용으로 재생하려고합니다.JAR 파일에서 Java 애플릿의 진입 점을 어떻게 확인할 수 있습니까?

<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> 

애플릿에는 올바른 manifest 또는 jnlp 파일이 없습니다. jar -tvf 'jarfile.jar'를 사용하여 jar 파일의 모든 클래스 목록을 가져 오려고했지만 어느 것이 진입 점인지 확인할 수 없습니다.

도움을 주시면 감사하겠습니다.

답변

1

소리가 매우 복잡합니다. 대략 나는이 필요 생각 :

  1. 는 서버의 항아리의 업로드 후, 당신은 (Load jar dynamically 참조) 서버에 항아리를로드하는 사용자 정의 클래스 로더를해야합니다.
  2. 그런 다음 Reflection을 사용하여 애플릿 메인 클래스를 찾을 수 있습니다.
  3. 그러면 <object> 태그를 생성 할 수있는 JSP로 리디렉션됩니다.
1

.. 그러나 어떤 것이 엔트리 포인트인지를 결정할 수 없다. 같은

사용 무언가 : 여기

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

와 프로그램에이 결과를 전달할 수 있습니다 어떻게 정보를 이용하여 가겠어요 "pac/kage/ClassName.class"문자열에서 인스턴스를 확인할 수있는 클래스를 얻으시겠습니까? – pLiKT

+0

아, 클래스를 가져 오기 위해 Class.forName ("pac.kage.ClassName")을 사용할 수 있습니다. 아주 멋지다! 실제 객체를 인스턴스화 할 수 없지만 Applet.class.isAssignableFrom이 작동하는 것 같습니다. – pLiKT

0

다른 의견에 따라 부분적인 해결책이지만, 나는 애플릿의 모든 서브 클래스가 확인되고 있었다 문제 (How can identify Applet subclasses from a Jar file?)에 달렸다. 이 프로그램은 서브 클래스 인 Applet 인 Jar 파일 내의 클래스를 출력합니다. 이러한 클래스 중 하나 (아마도 가장 파생 된 클래스)가 진입 점입니다.

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 파일의 클래스 목록을 인수로 사용합니다. 리눅스를 사용

는 인수는 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