2016-08-15 12 views
0

eclipseを使用して.jarファイルにエクスポートした後、この例外が発生します。 IntelliJは同じことを言います。しかし、私のプログラムは日食でうまくいきます。initメソッドの例外 - JavaFX

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(Unknown Source) 
at java.security.SecureClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.access$100(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 

Caused by: java.lang.ClassNotFoundException: javafx.application.Application 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 13 more 

この問題は何か?

JDKのバージョン:1.7.0_79 開始:-cp jfxrt.jar -jar myapp.jarのjavaでそれをしようとした後myapp.jar

-jar javaは、それは私に次のエラーを与える:

java -cp jfxrt.jar -jar memo.jar 
Exception in thread "JavaFX Application Thread" Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplicationWithArgs$100(LauncherImpl.java:352) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$119(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$117(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$118(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$450(GtkApplication.java:139) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 11 more 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.NullPointerException 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:383) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    ... 5 more 
+0

クラスパスの問題のようです。どのようにアプリケーションを起動していますか? – bradimus

+0

@bradコンソールコマンド: 'java -jar myapp.jar' – Eric

+0

実行するJDKのバージョンは? –

答えて

0

javafx.application.Applicationクラスはjavafxライブラリにあります。 EclipseのようなIDEでは、コンパイルと実行に必要なライブラリを参照するようにプロジェクトを設定するのが一般的です。コードをjarファイルに入れてIDEの外で実行するときは、ライブラリをランタイムに別の方法で提供する必要があります。

これを行うための標準的な方法は、アプリケーションjarと必要なライブラリの両方への参照を持つクラスパスを設定することです。これを行うにはDOSコマンドは次のようになります。

set classpath=c:\myProjects\myApplication\myJar.jar;c:\java\libaries\javafx\jfxrt.jar 

、その後、Javaは両方のこれらのjarファイル

+0

JDK 1.7.0_06からJDK 8までのJavaFXの標準的な場所は 'jre'の' lib'サブディレクトリでした。 JDK 8(Oracle JDKの場合)からは 'lib/ext'に移動されました(デフォルトではクラスパス上にあります)。 –

0

OracleのJDKは、以降のバージョン1.8からのクラスパス上のJavaFXを含んでクラスへのアクセスを持っているでしょう。 JDKをバージョン8以降にアップグレードする場合は、JDKを実行する必要があります。とにかくJava 8より前のバージョンのプロダクションレベルのJavaFXアプリケーションを構築することはお勧めしません。

本当にJava 7を使用する場合は、組み込みのJavaFX deployment toolsを使用して、eclipseからバニラの "create executable jar"の代わりにjarを構築することを検討してください。これらは、必要に応じてFXランタイムを含むjarファイルを適切に構築します。 Eclipseでこれを行う最も簡単な方法は、e(fx)clipse(Eclipseプラグイン)をインストールすることです。 tutorialがあり、jarファイルを作成する手順が含まれています。

関連する問題