よしを使用してコンパイルされたJavaScriptファイルを実行することはできませんので、私は次の内容のHelloWorld.js
というJavaScriptファイルを作成:今はRhinoのJavaScriptのコンパイラ
java.lang.System.out.println("Hello World!");
を、私が使用してRhinoのJavaScriptのコンパイラを使用してコンパイルコマンド(js.jar
ファイルは私のクラスパスにある)次
java org.mozilla.javascript.tools.jsc.Main HelloWorld.js
それは、JavaScriptファイルをコンパイルし、期待通りのJavaクラスファイルを作成しました。それから、java HelloWorld
を呼び出してJavaクラスファイルを実行しようとしました。私はjava.lang.NoClassDefFoundError
がスローされる原因となったかを理解しようとした、と私は、このblog postで読んだから、私はクラスがコンパイル時に存在した場合java.lang.NoClassDefFoundError
がスローされることを学んだ
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クラスパスでは使用できません。
だから私は、問題が何であるかを確認するために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仮想マシンがそれを見つけることができない理由はありません。これは私が混乱しているところです。私はここからどこに行くべきか、この問題を解決するために何をすべきかわかりません。
私は次のようにHelloWorld
のインスタンスでexec
メソッドを呼び出すためのRhinoを起動した場合、私はJavaクラスファイルを実行できることが判明:
java -jar /usr/share/rhino/js.jar HelloWorld.class
しかし、私はJavaクラスファイルを実行したいと思いますjs.jar
ファイルが既に自分のクラスパスにあるので、java HelloWorld
コマンドを直接使用してください。私は問題が何であるかを理解したいので、実際に何が起こっているのかを知ることができます。
'HelloWorld.java'という名前のJavaScriptファイルo_O。 Rhinoは 'Java'ファイルではなく' js'(javascript)ファイルを実行します。 'Java'プログラムを走らせるために、Rhinoを持つ必要はありません。 – kirilloid
@kirilloid:RhinoでコンパイルされたJavaクラスを実行するには、Rhinoランタイムライブラリが必要です。 – Thilo
@Thilo Rhinoは 'js'を' Java'にコンパイルしますか? – kirilloid