让Rhino JS看Java类

时间:2010-12-19 05:08:33

标签: java javascript classpath rhino

我正在玩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

4 个答案:

答案 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启动脚本),则可能会遇到此问题。

您也可以尝试将测试类放在一个包中,看看它是否有一些顶级类的怪癖。