我是nashorn引擎的新手。在我的java代码中我指定了filereader中的javascript路径,但它在运行时抛出了filenotfoundexception。如果我把我的javascript放在桌面上并给出那个位置,我的代码是有效的。但如果我把我的javascript在项目的一个文件夹中的函数它不工作抛出文件未找到异常。 这是我的错误代码
engine.eval(new FileReader("res/nashorn1.js"));
这是我的工作代码
engine.eval(new FileReader("C:/Users/selva/Desktop/res/nashorn1.js"));
我正在使用java独立应用程序。 我的代码
public class Nashorn1 {
public static void main(String[] args) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader("C:/Users/selva/Desktop/res/nashorn1.js"));
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("fun1", "Peter Parker");
System.out.println(result);
System.out.println(result.getClass());
invocable.invokeFunction("fun2", new Date());
invocable.invokeFunction("fun2", LocalDateTime.now());
invocable.invokeFunction("fun2", new Person());
}
}
nashorn1.js
var fun1 = function(name) {
print('Hi there from Javascript, ' + name);
return "greetings from javascript";
};
var fun2 = function (object) {
print("JS Class Definition: " + Object.prototype.toString.call(object));
};
任何帮助都会得到极大的赞赏!!
答案 0 :(得分:1)
这与Nashorn无关;它完全与Java和文件有关。
指定时:
new FileReader("res/nashorn1.js")
这被解释为 relative 路径,因此针对您当前的工作目录进行解析。如果您当前的工作目录在执行程序时恰好是C:/Users/selva/Desktop
,那么它将起作用。 (尝试使用cd \Users\selva\Desktop
或类似的东西;我的DOS生锈了,我没有Windows方便。)
指定整个路径时,会找到该文件。
[脚注:我通常对Java API规范印象非常深刻,因此java.io.FileReader
文档根本没有关于如何解释字符串的信息而感到非常惊讶。哎呀;我已经提交了一个错误,如果他们承认错误,我会在这里以热情的赞美来更新。]
对于你的情况,很难理解"最好的"解决方案是因为没有"问题,"究竟;你只需要让Java知道脚本实际可以找到的位置。如果您需要做更具体的事情,请发布后续行动。