2014-09-19 3 views
-1

Я новичок в nashorn engine. В моем java-коде я указываю путь javascript в filereader, но он бросает filenotfoundexception в runtime.If я помещаю свой javascript на рабочий стол и указываю это местоположение своим кодом is works.but Если я помещаю свою функцию javascript в одну из папки в проекте, это не работает, то выдает исключение, не найденное в файле. Вот мой код ошибкиФайл не найден Исключением при выполнении javascript в Nashorn

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

Это не имеет ничего общего с Нашорном; это все о Java и файлах.

При указании:

new FileReader("res/nashorn1.js") 

это интерпретируется как путь относительной, так решается против текущего рабочего каталога. Если ваш текущий рабочий каталог оказался C:/Users/selva/Desktop во время выполнения программы, он будет работать. (Попробуйте это с помощью cd \Users\selva\Desktop или чего-то подобного: мой DOS ржавый и у меня нет Windows.)

Когда вы укажете весь путь, файл будет найден.

[Сноска: Я обычно очень впечатлен спецификацией Java API и поэтому очень удивлен тем, что в документации java.io.FileReader нет никакой информации о том, как интерпретируется строка. К сожалению, Я подал ошибку, и если они подтвердят это, я обновлю здесь с эффузивной похвалой.]

Для вашего случая трудно понять, что такое «лучшее» решение, потому что нет «проблемы»; вам просто нужно дать Java знать, где собственно сценарий можно найти. Опубликуйте последующую информацию, если вам нужно что-то более конкретное.