0

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

任何帮助将不胜感激!!

4

1 回答 1

1

这与 Nashorn 无关;这都是关于 Java 和文件的。

当您指定:

new FileReader("res/nashorn1.js")

这被解释为相对路径,因此针对您当前的工作目录进行解析。如果您当前的工作目录恰好C:/Users/selva/Desktop在您执行程序时,它会起作用。(尝试使用cd \Users\selva\Desktop或类似的东西;我的 DOS 生锈了,我手边没有 Windows。)

当您指定整个路径时,会找到该文件。

[脚注:Java API 规范通常给我留下了深刻的印象,因此非常惊讶于java.io.FileReader文档根本没有关于如何解释字符串的信息。哎呀;我已经提交了一个错误,如果他们承认它,我会在这里更新并热情赞美。]

对于您的情况,很难理解“最佳”解决方案是什么,因为完全没有“问题”;您只需要让 Java 知道脚本的实际位置。如果您需要做一些更具体的事情,请发布后续行动。

于 2014-09-19T13:20:24.423 回答