В моем коде используется Nashorn для предоставления пользователю функций сценариев, при этом многие классы и функции, реализованные на Java, доступны сценариям через Nashorn.
Одной из задач программы является, конечно, сообщать пользователю о любых ошибках, связанных со сценариями, когда они встречаются. Это очень просто, если происходит ScriptException
, так как простое перехват исключения и использование метода getLineNumber()
возвращает правильное значение. Однако иногда возникает исключение не из-за синтаксиса, а из-за того, как вызывается код на стороне Java, например, из-за нулевого параметра, который должен был быть допустимым объектом. Они вызывают другие виды исключений, которые все еще можно перехватить при вызове метода eval
, но, поскольку у них нет метода getLineNumber()
, невозможно угадать, где остался интерпретатор.
Есть ли способ получить последнюю выполненную строку из движка Nashorn?
Код примерно выглядит так:
try {
engine.eval( script);
// successful
return -1;
} catch ( ScriptException e)
{
// the ScriptException reports the line number
return e.getLineNumber();
}
catch ( Exception e)
{
// is it possible to get the line number here too?
// ...
return lineNumber;
}