让Rhino JS看Java类

Ken*_*Ken 4 javascript java rhino classpath

我正在玩Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码.

例如,这工作正常:

print(new java.util.Date());
Run Code Online (Sandbox Code Playgroud)

但是使用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
Run Code Online (Sandbox Code Playgroud)

我确信这很简单.我错过了什么?

编辑:我发布它是这样的:

$ CLASSPATH=. java -jar rhino.jar
Run Code Online (Sandbox Code Playgroud)

或这个:

$ java -classpath . -jar rhino.jar
Run Code Online (Sandbox Code Playgroud)

或者我将NanoHTTPD.java移动到文件夹"./nano"中,添加package nano;到文件顶部,编译它,然后替换为".".在上面的类路径分配中使用"nano".

无论我怎么做,从翻译中我看到:

js> java.lang.System.getProperty("java.class.path")
/Users/me/blah/rhino.jar
Run Code Online (Sandbox Code Playgroud)

erj*_*ang 6

你需要像这样运行Rhino:

java -cp /path/to/rhino/js.jar:. org.mozilla.javascript.tools.shell.Main
Run Code Online (Sandbox Code Playgroud)

这会将当前目录添加到类路径中.使用-jarclobbers类路径.(类路径分隔符取决于您的操作系统.)

然后试试

js> Packages.NanoHTTPD
[JavaClass NanoHTTPD]
Run Code Online (Sandbox Code Playgroud)

如果它说[JavaPackage NanoHTTPD],这意味着它没有找到该名称的类.

无论如何你都无法实例化NanoHTTPD,所以我猜你想尝试Packages.NanoHTTPD.main([])什么.