在Nashorn中执行javascript时找不到文件异常

时间:2014-09-19 10:31:39

标签: java javascript java-8 nashorn

我是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));
};

任何帮助都会得到极大的赞赏!!

1 个答案:

答案 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知道脚本实际可以找到的位置。如果您需要做更具体的事情,请发布后续行动。