2012-09-02 23 views
7

Ich habe den ganzen Tag versucht, meine Javafx-Anwendung in eine JAR-Datei umzuwandeln. Ich benutze Java 1.7 Update 7.Intellij Javafx-Artefakt - wie machst du es?

Oracle hat some information, aber es scheint nur verstreut über den ganzen Ort. Intellij macht fast den Job, aber ich bekomme die folgende Fehlermeldung:

java.lang.NoClassDefFoundError: javafx/application/Application 

Welche scheint zu sagen, dass ich Java sagen, wo die jfxrt.jar ist ... Wenn ich dieses Glas in meine Classpath Info hinzufügen für das Manifest Build in intellij - Strg + Shift + alt + s -> Artifacts -> Ausgabe Registerkarte Layout -> Klasse Path, dann bekomme ich einen anderen Fehler:

Could not find or load main class com.downloadpinterest.code.Main 

Es scheint seltsam jfxrt.jar zu müssen sind in mein Klassenpfad obwohl ...

Ich habe versucht, ein Ameisenskript auch zu schaffen, aber ich fühle mich wie IntelliJ ist 90 % des Weges dorthin - und ich brauche nur ein wenig Hilfe, um herauszufinden, warum ich jfxrt.jar einbinden muss und warum meine Main-Klasse nicht gefunden wird (ich vermute, dass ich sie irgendwie zum Klassenpfad hinzufügen muss) ?).

Kann mir jemand sagen, was passiert? Ich hatte vorher eine Basis-GUI, die gut funktionierte, aber JavaFX scheint das Leben kompliziert zu machen!

Antwort

4

Ihre Annahme ist korrekt, Sie müssen JavaFX zum Klassenpfad hinzufügen.
Es befindet sich in [JDK]/jre/lib/jfxrt.jar.

Um JavaFX zur Laufzeit, können Sie es mit Ihrer Anwendung bündeln können, in diesem Oracle guideoder illustriert machen Java 7 Update 6 eine Voraussetzung für Ihre Anwendung, fügen Sie dann [JAVA_HOME]/lib/jfxrt.jar zu dem Classpath zum frühest möglichen Zeitpunkt der Anwendung.

Die erste Option bedeutet mehr Arbeit für Sie, aber stellt absolut sicher, dass alle Benutzer die gleiche Version der Bibliothek haben - und Sie können die JRE auch bündeln, während Sie dabei sind. Die zweite Version bietet diese Gewissheit nicht, ist aber einfacher zu realisieren.

Als Variante zu der zweiten Option - wenn Bündelung der JRE ist eigentlich möglich für Sie -, können Sie auch nur in Ihrer Distribution bündeln und dann eine Shell-Skripte/Batch-Datei/Executable-Wrapper zu machen Programm benutze es. Auf diese Weise erhalten Sie alle Gewissheit von Option I mit nur einem moderaten Anstieg der Schwierigkeit von Option II.

+0

Ich bemerkte, wenn ich dies Intellij einfach fügt eine Zeile in der JAR-Manifest, die den Klassenpfad (es bündelt Jfxrt in meinem Glas nicht). Dies scheint wie ein Problem sein, wenn andere mein Programm herunterladen und versuchen, es zu verwenden - d. H. Einige Leute haben Macs, einige Linux, einige Windows und der Pfad der jfxrt.jar wird für verschiedene Leute unterschiedlich sein. Weißt du sowieso, um dieses Problem zu lösen? –

+0

Ich habe die Antwort aktualisiert, um das zu decken. –

+0

Danke, ich habe Orakel gefragt, ob es irgendwo eine volle Ameise gibt, da ich es bisher nur geschafft habe, das Ameisen-Skript zu erstellen. Ich werde eins veröffentlichen, wenn ich eins finde oder es schaffen kann! –

4

Ich hatte das gleiche Problem. Aber ich fand diesen Blog-Beitrag: Packaging JavaFX 2 Applications in IntelliJ IDEA 12.1, die zeigt, wie es in Intellij 12.1

Offenbar IntelliJ hat die Fähigkeit, eine spezielle "JavaFX-Anwendung" Artefakt zu produzieren. Es bündelt automatisch alles, was es in Ihrer JAR-Datei benötigt.