좋아를 사용하여 컴파일 된 자바 스크립트 파일을 실행할 수 없습니다, 그래서 다음과 같은 내용으로 HelloWorld.js
라는 이름의 자바 스크립트 파일을 생성 : 이제이 코뿔소는 자바 스크립트 컴파일러
java.lang.System.out.println("Hello World!");
를, 내가 사용하는 코뿔소는 자바 스크립트 컴파일러를 사용하여 컴파일 다음 명령합니다 (js.jar
파일 내 클래스 경로에) : 그것은 자바 스크립트 파일을 컴파일하고 예상대로 자바 클래스 파일을 생성
java org.mozilla.javascript.tools.jsc.Main HelloWorld.js
. 그런 다음 java HelloWorld
을 호출하여 Java 클래스 파일을 실행하려고했습니다.
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: HelloWorld. Program will exit.
내가 클래스가 컴파일 중에 존재하는 경우 java.lang.NoClassDefFoundError
가 발생되는 것을 배운 것을 나는이 blog post 읽어 나는 java.lang.NoClassDefFoundError
가 슬로우되는 원인이 무엇인지 이해하려고 노력하고,에서 : 그러나, 다음과 같은 오류 메시지가 생성 런타임에는 Java 클래스 경로에서 사용할 수 없습니다.
javap HelloWorld
명령을 실행하고, 이것은 내가 가진 것입니다 :
public class HelloWorld extends org.mozilla.javascript.NativeFunction implements org.mozilla.javascript.Script {
public HelloWorld();
public static void main(java.lang.String[]);
public final java.lang.Object exec(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable);
public final java.lang.Object call(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, org.mozilla.javascript.Scriptable, java.lang.Object[]);
public int getLanguageVersion();
public java.lang.String getFunctionName();
public int getParamCount();
public int getParamAndVarCount();
public java.lang.String getParamOrVarName(int);
public boolean getParamOrVarConst(int);
}
자, 나는이에서 이해하면 HelloWorld
클래스가 존재한다는 것입니다 및 public
로 선언 . 따라서 Java Virtual Machine이 찾을 수없는 이유가 없어야합니다. 이것은 내가 혼란스러워하는 곳입니다. 여기에서 어디로 가야할지,이 문제를 해결하기 위해 무엇을해야할지 모릅니다.
java -jar /usr/share/rhino/js.jar HelloWorld.class
을 그러나 나는 자바 클래스 파일을 실행하고 싶습니다 :
나는 다음과 같이 내가 HelloWorld
의 인스턴스에 exec
메소드를 호출하는 코뿔소를 호출하면 내가 자바 클래스 파일을 실행할 수 있습니다 발견 js.jar
파일이 이미 내 클래스 경로에 있기 때문에 java HelloWorld
명령을 직접 사용하십시오. 나는 그 문제가 무엇인지 이해하고 싶다. 그래서 그 뒤에서 실제로 일어나는 일을 알고있다.
'HelloWorld.java' o_O라는 JavaScript 파일. Rhino는'Java '파일이 아닌'js' (javascript) 파일을 실행합니다. 'Java' 프로그램을 실행하기 위해서는 Rhino가 필요하지 않습니다. – kirilloid
@kirilloid : Rhino에서 컴파일 한 Java 클래스를 실행하려면 Rhino 런타임 라이브러리가 필요합니다. – Thilo
@Thilo Rhino가'js'를'Java'로 컴파일합니까? – kirilloid