계산기 만들기 연습중 계산 결과를 불러오는 과정에서 에러가 발생했다.
Error
Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null
at com.newlecture.web.calc3.service(calc3.java:44)
에러에 해당하는 코드는 아래와 같다.
if(operator != null && operator.equals("=")) {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
try {
exp = String.valueOf(engine.eval(exp));
} catch (ScriptException e) {
e.printStackTrace();
}
}
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
nashorn이 JDK 15+ 버전부터 삭제되었다고 한다.
이 때는 engine을 nashorn대신 GrealVM을 사용하면 된다.
ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
그 전에 먼저 pom.xml에 의존성 설정을 추가해야한다.
이클립스에 pom.xml이 없다면
프로젝트 이름 폴더 우클릭 -> configure -> convert to maven project 을 눌러서
pom.xml을 만들어 준다.
pom.xml에 아래 코드를 입력해준다.
<dependencies>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>19.2.0.1</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>19.2.0.1</version>
</dependency>
</dependencies>