我正在玩Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码。
例如,这很好用:
print(new java.util.Date());
但是NanoHTTPD(单个.java文件,没有命名空间,同一个文件夹),我根本就没有运气:
js> new Packages.NanoHTTPD()
js: "<stdin>", line 4: uncaught JavaScript runtime exception: TypeError: [JavaPackage NanoHTTPD] is not a function, it is object.
at <stdin>:4
我确信这很简单。我错过了什么?
编辑:我这样推出:
$ CLASSPATH=. java -jar rhino.jar
或者这个:
$ java -classpath . -jar rhino.jar
或者我将NanoHTTPD.java移动到文件夹“./nano”中,将package nano;
添加到文件顶部,编译它,然后替换为“。”。在上面的类路径分配中使用“nano”。
我做的任何方式,从我在口译中看到:
js> java.lang.System.getProperty("java.class.path")
/Users/me/blah/rhino.jar
答案 0 :(得分:6)
你需要像这样运行Rhino:
java -cp /path/to/rhino/js.jar:. org.mozilla.javascript.tools.shell.Main
这会将当前目录添加到类路径中。使用-jar
clobbers类路径。 (类路径分隔符取决于您的操作系统。)
然后尝试
js> Packages.NanoHTTPD
[JavaClass NanoHTTPD]
如果显示[JavaPackage NanoHTTPD]
,则表示尚未找到该名称的类。
无论如何你无法实例化NanoHTTPD,所以我猜你想尝试Packages.NanoHTTPD.main([])
或其他东西。
答案 1 :(得分:2)
在我的Linux中,我发现命令'rhino'是一个运行'org.mozilla.javascript.shell.Main'并带有'-classpath'选项的shell脚本。您可以编辑该文件以包含类的路径。
我认为剧本是自我解释的。
如果使用Linux,请键入:
less `which rhino`
答案 2 :(得分:2)
如果您不打算在Rhino中使用自己的卡片,通常按以下方式操作:
java -jar ./js.jar
使用-jar
切换的问题是,在这种情况下您无法定义classpath
,如果没有设置classpath
,则无法访问自己的包和类。
为了能够设置classpath
,您需要使用-cp
开关运行Rhino。在这种情况下,您设置classpath
by -cp
开关,其中包括Rhino包和您的包,还需要在包中传递Rhino的主类路径(org.mozilla.javascript.tools.shell.Main
)
以下是如何将自己的包添加到Rhino类路径的示例:
假设您已将班级mypackage.myclass
放在mylib.jar
中如果您想在Rhino课程中使用此课程,则需要按以下方式运行Rhino:
java -cp "./js.jar;../mylib.jar" org.mozilla.javascript.tools.shell.Main
然后您可以访问您的班级:
jc> mc_obj = new Packages.mypackage.myclass()
答案 3 :(得分:0)
确保当前目录包含在类路径中。默认的类路径是当前目录,但如果已将类路径设置为其他内容(例如通过rhino启动脚本),则可能会遇到此问题。
您也可以尝试将测试类放在一个包中,看看它是否有一些顶级类的怪癖。