Как вы возвращаете код выхода из Rhino при встраивании? - PullRequest
1 голос
/ 17 июня 2011

Я использую Java для запуска простых сценариев, написанных на JavaScript, используя Rhino по умолчанию, связанный с JRE.Я хотел бы иметь возможность использовать один и тот же сценарий в приложении и из версии для командной строки, поэтому я не могу использовать java.lang.System.exit(3) (это приведет к преждевременному выходу из основного приложения). Я не могу использовать диспетчер безопасности для его блокировки, так каклюди жалуются на проблемы с производительностью, когда работает менеджер безопасности.

Возможно, в JavaScript есть какая-то функция для выхода из скрипта?

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Нет, нет.Но вы можете создать исключение, скажем, скажем, ExitError:

public class ExitError extends Error {
    private final int code;

    public ExitError(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}

Теперь в приложении, выполняющем скрипт, вы можете сделать следующее:

public int runScript() {
    try {
        // Invoke script via Rhino
    } catch (ExitError exc) {
        return exc.getCode();
    }
}

И в командестрочная версия:

public static void main(String[] args) {
    try {
        // Invoke script via Rhino
    } catch (ExitError exc) {
        System.exit(exc.getCode());
    }
}

Кроме того, в своем коде JS напишите функцию-обертку:

function exit(code) {
    throw new ExitError(code);
}
1 голос
/ 19 октября 2011

Вот идея:

Оберните ваш скрипт в функцию и вызовите ее. Возврат из этой функции приведет к выходу из сценария.

//call main
main();
//The whole work is done in main
function main(){
  if(needToExit){
    //log error and return. It will essentially exit the script
    return;
  }
  //your script goes here
}
...