2014-02-22 4 views
1

Java 7 패키지로 된 Java 응용 프로그램은 고객 컴퓨터에서 다음 스택 추적을 제공했습니다. 확실히 Java 7, 어떤 아이디어를 실행하고있다하더라도 Java 8의 새로운 Javascript 엔진을 사용하려고하는 것 같습니다.새로운 Java 8 Javascript 엔진을 사용하려고했기 때문에 Java 7 응용 프로그램 오류 Nashorn

java.lang.NoClassDefFoundError: Could not initialize class jdk.nashorn.internal.objects.Global 
at jdk.nashorn.internal.runtime.Context.newGlobal(Context.java:778) 
at jdk.nashorn.api.scripting.NashornScriptEngine$3.run(NashornScriptEngine.java:425) 
at jdk.nashorn.api.scripting.NashornScriptEngine$3.run(NashornScriptEngine.java:421) 
at java.security.AccessController.doPrivileged(Native Method) 
at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:421) 
at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:181) 
at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:152) 
at jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:141) 
at javax.script.ScriptEngineManager.getEngineByName(Unknown Source) 

그는 자바 (8)가 설치되어 있다면 몰라 (butIve 질문)하지만 난 그가 실제로 자동 검사 때문에 응용 프로그램을 실행하고 나는 시작시 할 로그인 자바 7을 사용하고 있습니다 알고있다. 이는

18/02/2014 21.47.09 제공합니다 com.jthink.songkong.cmdline.SongKong : writeSystemInfo : 정보 : 윈도우 7 6.1 x86에서 자바 1.7.0_45 24.45-B08 32 비트를 사용 SongKong 1.17.0는

성공적으로 초기화

실패한 코드 는 단순히 :

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("JavaScript"); 
+0

여기에 연결되는 코드를 게시 할 수 있습니까? – RaviH

+0

RaviH 코드가 추가되었습니다. –

+0

코드가 정상적으로 보입니다. Java8을 사용하여 코드를 컴파일 했습니까? 그게 문제가 될 수 있습니다 - 확실하지! – RaviH

답변

2

내가 주위 발굴의 조금 ... javax.script.ScriptEngineManager 찾아 ScriptEngineFactory 클래스를 등록하는 SPI 메커니즘에 의존

했다. 본질적으로 클래스 패스를 트래킹하여 이러한 클래스를 찾습니다. 외관상으로는, 당신의 경우에, 이것은 NashornScriptEngineFactory를 찾아내는 결과가되었습니다.

하지만 왜?

음 만 정말 3 가능성이 있습니다 :

  • 당신은 응용 프로그램의 클래스 경로에 Nashorn를 포함하는 JAR 파일이 있습니다.

  • Nashorn이 JAR 파일 중 하나에 포함 된 JVM을 사용하고 있습니다.

  • 누군가가 Nashorn을 Java 설치 확장 디렉토리에 추가했습니다.

알아있는, 난 당신이 Nashorn 클래스를 제공하는 JAR 찾으려고 jar tvf some.jar | grep Nashorn를 사용 후, 클라이언트 시스템의 JAR 파일을 모두 찾아 find를 사용하는 것이 좋습니다.

+0

죄송합니다. 이제 Java 7을 사용하여 응용 프로그램이 실행되고 있음을 명확히했습니다. 로그 확인을 위해 로그 발췌가 추가되었습니다. 나는 prereleases가 설치자와 GUI를 올바르게 렌더링하지 않는 재미있는 일을 모두했기 때문에 Java 8을 사용하지 않고 있습니다.이 문제가 해결된다면 Java 8로 이동할 수는 있지만 Java 7을 설치하는 이유는 알 수 없습니다. Java 8 코드를 찾고 있습니다. –

+0

그들은 나에게 돌아 오지 않았다. (실제로 윈도우 7 시스템이다.) 하지만 최신 Java 8을 시험해 보았으므로 Java 8 JRE를 번들로 제공하고 Java 8 JDK로 빌드하여 다음 버전에 사용하면 문제가 해결 될 것입니다. 감사합니다. –

+0

답변은 "Nashorn under Java 7": http://stackoverflow.com/questions/16929981/nashorn-under-java-7?rq=1 오른쪽에있는이 게시물 옆에 있습니다. – RaviH