簡體   English   中英

無法執行使用Rhino JavaScript編譯器編譯的JavaScript文件

[英]Can't execute a JavaScript file compiled using the Rhino JavaScript Compiler

好的,所以我創建了一個名為HelloWorld.js的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類文件。 但是,它生成以下錯誤消息:

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被拋出,從我在這篇博文中讀到的內容我了解到如果在編譯期間存在類但在Java類路徑中不可用則拋出java.lang.NoClassDefFoundError在運行時。

所以我運行了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虛擬機無法找到它的任何原因。 這是我很困惑的地方。 我不知道從這里去哪里,也不知道如何解決這個問題。

我發現如果我調用Rhino來調用HelloWorld實例上的exec方法,我可以執行Java類文件,如下所示:

java -jar /usr/share/rhino/js.jar HelloWorld.class

但是,我想直接使用java HelloWorld命令執行Java類文件,因為js.jar文件已經在我的類路徑中。 我想了解問題是什么,以便我知道幕后真的發生了什么。

你確定類文件在類路徑(以及js.jar)上嗎?

嘗試

java -cp .;js.jar HelloWorld

(假設當前目錄中有HelloWorld.class,否則類似於-cp build;js.jar )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM