2013-06-01 11 views
13

が、私はこのエラーJavaFXの例外:JavaFXの/アプリケーション/アプリケーション

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Ap 
plication 
     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 

私のクラスファイルを実行しようとして取得しています、これはソース

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

import java.util.concurrent.Executor; 

public class TestApplication extends Application{ 

    @Override 
    public void start(Stage stage) throws Exception { 
     new TestApplication(); 
    } 

    public TestApplication() { 
     try{ 
      final Parent root = FXMLLoader.load(Executor.class.getResource("test.fxml")); 
      final Stage stage = new Stage(){{ 
       setScene(new Scene(root, 300, 250)); 
       setTitle("Test"); 
       setResizable(false); 
       show(); 
      }}; 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 
です

fxmlファイルには、単純なGUIが含まれています。

+1

可能重複[jdk1.7のjavacのは、-cpオプションなしでJavaFXのjarを見つけることができません](http://stackoverflow.com/question/16849992/jdk1-7s-javac-cant-find-javafx-jar-without-cp-option) – jewelsea

+0

私のクラスパスをjfxrt.jarのディレクトリに宣言しました。メインクラスを見つけたりロードしないでください ' – Archey

+1

詳細については、クラスパスに現在のディレクトリが必要です。> [JavaFX 2.0を手動でコンパイル](http://stackoverflow.com/questions/9436219/compile-javafx-2-0 -Manually) – jewelsea

答えて

0

私はLinuxで簡単なWebアプリケーションを開発していますが、同じエラーがありますが、実際には簡単に修正できます(自分でコマンドラインで開発していると仮定します)。

cat compile.sh 
#!/bin/bash 

/usr/lib/jvm/jdk1.7.0_25/bin/javac WebViewSample.java -cp /usr/lib/jvm/jdk1.7.0_25  
/jre/lib/jfxrt.jar 

$ cat run.sh 
#!/bin/sh 
JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25/bin/ 
CLASSPATH=/usr/lib/jvm/jre1.7.0_25/lib/jfxrt.jar:. 

$JAVA_HOME/java -cp $CLASSPATH WebViewSample $* 2>&1 /dev/null | awk -F\| '{ print $2"|"$3 ; exit $1 }' 

exit $? 
8

私はここ数時間、この非常に同じ問題を解決しました。明示的に書かれていないとは思えますが、は、に、JavaFXパッケージツールの1つ、Antタスクまたはjavafxpackager実行可能ファイルのいずれかを使用する必要があります。 (http://docs.oracle.com/javafx/2/deployment/packaging.htm、セクション5.3.1を参照)。 NetBeans IDEはAntを使用してコードをパッケージ化します。

/com/javafx/main/Main$1.class 
/com/javafx/main/Main$2.class 
/com/javafx/main/Main.class 
/com/javafx/main/NoJavaFXFallback.class 

付:あなたはそれらのパッケージング方法のいずれかを使用する場合(私はIntelliJのを使用しています)

、アプリケーションのコードやリソースのすべてに加えて、それはまた、あなたの出力JARファイルに以下を追加しますこれらは、コマンドラインからアプリを実行することができます:

java -jar outjar.jar 

すべて正常に動作します。余分なcom.javafx.mainファイルを削除しても、アプリケーションは実行されません。

これを再確認するには、JavaFXサンプル(BrickBreaker、Ensemble、FXML-LoginDemo、SwingInterop)の4つのJARファイルすべてを調べました。彼らには "余分な"ファイルもあります。このことができます

javafxpackager -createjar -appclass sample.Main -outfile outjar -v -nocss2bin -srcdir C:\workspaces\garoup1\out\production\javafx1 

希望:私の小さなテストアプリの

は、私が「実行可能」JARファイルを構築するために、このコマンドラインを使用しました!

+0

MANIFEST.MFの生成方法を教えてください。 – Math

+0

私はIntellijを使用していますが、私はこの問題を抱えています。しかし、ビルドにはantを使い、javafxpackerはデプロイするのがわかりました。それでも、このフォールバッククラスはありません。 Intellij内でこれを回避する方法はありませんか? – gadelkareem

+0

Java 1.8がインストールされていて、意図的にjavafxを参照するCLASSPATHを持っていても、このエラーメッセージが表示されます。これはDbSchema 7.6.5で起こりました。クラスパスを除外javafxにハードコーディングしました。シェルスクリプトを編集した後、この問題は消えました。 –

1

私はjavafxアプリケーションを起動する "適切な"方法ではないかもしれないが、私はこの問題にしばらく苦労しており、外部パッケージングアプリケーションを使用する必要のない回避策を考え出した。

解決策はUtils4jを使用して、実行時に動的にjfxrtを読み込みます(このプラグインは、シェードプラグインと競合します)あなたは、javafx.application.Applicationを拡張するクラスでそれを読み込む別のクラスでそれを行うと、例えばそれに名前を付けることはできません。ランチャー

import org.fuin.utils4j.Utils4J 

public class Launcher { 

    public static void main(String[] args) { 
     Utils4J.addToClasspath("file:///"+System.getProperty("java.home")+ File.separator+"lib"+File.separator+"jfxrt.jar"); 

// CODE TO RUN YOUR CLASS THAT EXTENDS javafx.application.Application goes here. 

    } 
} 

あなたのプロジェクト(Mavenを使用している場合)でUtils4jを含めることができます。

<dependency> 
     <groupId>org.fuin</groupId> 
     <artifactId>utils4j</artifactId> 
     <version>0.7.0</version> 
    </dependency> 
1

私はmavenを使用していますが、私はこの端末でmvn install:install-file -Dfile="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfxrt.jar" -DgroupId=com.oracle.javafx -DartifactId=javafx -Dversion=2.2 -Dpackaging=jarを実行します(Windowsでは多少の違いがあります)。その後のmavenはjfxrt.jarをインストールします、あなたは単にあなたが私のようなのNetBeansを使用していて、インストールしたJDKの2つのバージョンを持っている場合は、あなたが設定ファイルに適切なJavaのインストールにクラスパスを変更する必要があり

<dependency> 
    <groupId>com.oracle.javafx</groupId> 
    <artifactId>javafx</artifactId> 
    <version>2.2</version> 
</dependency> 
0

としてそれを参照することができます。また、これは、NetBeansでバグです:
はどちらかがこれを実行することにより、--jdkhomeでのNetBeansを起動します:

"C:\Program Files\NetBeans Dev 201402160001\bin\netbeans.exe" --jdkhome "C:\Program Files\Java\jdk1.7.0_51" 

または/ etc/NetBeansで「netbeans_jdkhome」プロパティを設定し、それを行うには、2つの方法があります 。 conf

# Default location of JDK, can be overridden by using --jdkhome <dir>: 
netbeans_jdkhome="C:\Program Files\Java\jdk1.7.0_51" 
1

IntelliJと他のIDEは、実行/デバッグ設定をリファクタリングしません。 Mainクラスの名前の前にパッケージ名を手動で変更する必要があります。たとえば、 'sample.Main'を 'com.company.package.ui.Main'に変更すると、次に実行しようとするときに正しく起動されます。 IDEはメインクラスを見つけることができなかったので、既に赤い十字でRun/Debugボタンをマークしている可能性があります。また、実行/デバッグ設定を開くと警告が表示されます。 Javaの8を使用して

2

は、この問題を与えるべきではありませんが、それは私がEclipseのエクスポートから、最初は私のjarファイルを作成し、私

のためにした - > RunnableをJARファイルと、それは大丈夫でした。私がMavenに移動したとき、それは上記で失敗しました。

2つのjarを比較すると、fxに関連するものはどれもjarにパッケージ化されていないことがわかりましたが(Eclipseが生成したマニフェストはClass-Path: .でした) Mavenを取得する(Javaの8で)私のために働い以下でjarファイルをパッケージ化する

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <mainClass>com.pg.fxapplication.Main</mainClass> 
      </manifest> 
       <manifestEntries> 
        <Class-Path>.</Class-Path> 
       </manifestEntries> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
関連する問題