62 jar 실행 가능 exe4j 를 사용 하여 걸 수 있 는 exe 는 javax/script/Bindings 가 부족 합 니 다.

4200 단어 05문제.자바exe

머리말
최근 실행 가능 한 jar 를 exe 로 포장 하 는 수요 가 있어 서 비교적 흔히 볼 수 있 는 exe4j 를 사용 하 였 습 니 다. 
java -jar HelloWorld.jar

실행 가능 한 지 확인 한 다음 에 exe4j 를 사용 하여 실 행 된 jar,Main-Class,jre 의 상대 경로 등 을 설정 하고 마지막 으로 HelloWorld.exe 를 생 성 합 니 다. 
그러나 HelloWorld.exe 를 실행 할 때"Caused by:java.lang.NoClassDefFoundError:javax/script/Bindings"를 잘못 보 고 했 습 니 다.
완전한 오류 정 보 는 다음 과 같다.  
java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
	at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.NoClassDefFoundError: javax/script/Bindings
	at com.hx.tool.HelloWorld.start(HelloWorld.java:21)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	... 1 more
Caused by: java.lang.ClassNotFoundException: javax.script.Bindings
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 10 more

 
환경 정 보 는 다음 과 같 습 니 다.jdk 12+javafx 8+ exe4j 다운로드 한 현재 홈 페이지 최신 설치 패키지 
jre 는 jdk 12 수 동 build 에서 왔 습 니 다."bin\jlink.exe--module-path jmods--add-modules java.desktop--output jre"
 
 
시험 해 보다
jdk 자체 의 자바 명령 을 사용 하여 jar 를 실행 하면 정상적으로 실행 할 수 있 기 때 문 입 니 다. 
그리고 압축 exe 는 jdk 12 build 에서 나 온 jre 를 사용 합 니 다. 
그래서 저 는 jre 아래 자바(lanucher)를 사용 하여 Hello World.jar 를 실 행 했 습 니 다. 
잘못된 정보 가 위 와 일치 하 는 것 을 발견 하 였 습 니 다. 
java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
	at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.NoClassDefFoundError: javax/script/Bindings
	at com.hx.tool.HelloWorld.start(HelloWorld.java:21)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	... 1 more
Caused by: java.lang.ClassNotFoundException: javax.script.Bindings
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 10 more

 
따라서 build 에서 나 온 jre 는 jdk 자체 에 비해 부족 한 것 이 있 을 수 있 습 니 다.예 를 들 어 이곳 의 script-api 또는 이 두 가지 서로 다른 환경 으로 인해 위의 차 이 를 실 행 했 습 니 다. 
해결 방법:jdk 아래 빈,lib 디 렉 터 리 를 jre 디 렉 터 리 아래로 복사 하여 기 존 폴 더 를 덮어 씁 니 다.  
jre 교체 후 exe 를 더 블 클릭 하여 실행,정상 실행 
 
 
jre 와 jdk 가 같은 jar 를 수행 하 는 경우 다른 행동 을 하 는 것 을 알 게 되 었 습 니 다. 
예 를 들 면 여기 장면. 
 
 
완전무결 하 다
 

좋은 웹페이지 즐겨찾기