[Java_Error] Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null

투디·2022년 9월 22일

error

목록 보기
1/1

계산기 만들기 연습중 계산 결과를 불러오는 과정에서 에러가 발생했다.

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>
profile
개발자

0개의 댓글