JavaFX IntelliJ Standalone Programm exportieren

L

Lukas257

Mitglied
Hallo miteinander,

ich arbeite zur Zeit an einem JavaFX-Programm bei dem ich nun vor einem Problem stehe.
Die Programmierung ist soweit abgeschlossen und funktioniert. Wenn ich das Programm via IntelliJ IDEA starte läuft alles reibungslos.

Ich möchte jetzt eine .exe Datei erstellen die es quasi jedem ermöglicht dieses Programm zu nutzen, ohne vorher Java oder irgendwelche libraries die ich nutze installieren/downloaden zu müssen. Ich habe mittlerweile den ganzen Tag rumprobiert und bin mit meinem Latein ziemlich am Ende.

Ich nutze:
java version 13.0.1
javac version 13.0.1
IntelliJ IDEA 2019.3.2
javafx 13
pdfbox-app-2.0.18

Ich wäre dankbar für jeden Tipp der mich in die richtige Richtung führt, auch da ich noch etwas unsicher nach was genau ich eigentlich suche bzw. suchen muss.

Vielen Dank,
Lukas
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Schau mal ob Dir das hier hilft.
 
L

Lukas257

Mitglied
Danke für deine schnelle Antwort sascha!

Ich werde mir morgen oder übermorgen den Thread mal genauer anschauen.
MfG
 
L

Lukas257

Mitglied
Hi Sascha, bevor ich mich eingehender mit dem von dir vorgeschlagenen Thread befasse habe ich noch eine Frage.
Ich schaffe eine .jar aus IntelliJ zu exportieren, wenn ich diese über die Eingabeaufforderung laufen lasse bekomme eine Fehlermeldung.

Je nach dem wie ich diese .jar "builde" erhalte ich entweder eine

1. NullPointerExeption: Location is required (da liegt der Fehler denke ich in meinem Programm)

2. RuntimeExeption: No toolkit found

Meine Frage wäre jetzt, ob es, vorrausgesetzt ich schaffe es die .jar "ans Laufen" zu kriegen, möglich ist die .jar dann mit Launch4J in eine .exe zu packen. Ist das machbar, oder hälst du das für vergebene Mühe?
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
RuntimeExeption: No toolkit found
Die bekommst Du vermutlich wenn javafx nicht bekannt ist, also die libs nicht im classpath liegen. Ist aber nur geraten. Manuell über die IDE eine Jar bauen habe ich seit einer gefühlten Ewigkeit nicht mehr gemacht, da kann ich Dir also leider nicht helfen. Wie es allerdings mit Maven geht steht im Link.

Wenn Du aber eine lauffähige Jar hast (wie auch immer Du das machst), solltest Du auch mit Launch4j eine Exe bauen können.
Ich hatte Launch4j mal im Einsatz, bin aber, aus irgendeinem Grund, an den ich mich jetzt nicht mehr erinnern kann, davon wieder weg.
Überzeugt hat mich bisher nur jpackage. Das unterstützt auch andere Betriebsysteme, baut Dir auch einen Installer (wenn Du möchtest) und es ist Bestandteil des JDK (Version 14).
 
L

Lukas257

Mitglied
Hi Sasha,
ich habe mich jetzt etwas mit Maven beschäftigt und das Projekt mal neu aufgesezt.
Dabei habe ich mich an folgendem Tutorial orientiert:

Alerdings funktioniert jetzt weder das "runnen" meiner Main-Methode mit IntelliJ noch das runnen über Maven.

In IntelliJ bekomme ich folgende Fehlermehrldung

"Caused by: java.lang.IllegalStateException: Location is not set."

Bei Maven diese:

"Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) on project Brandschutznachweis: An exception occured while executing the Java class. null"

Wenn mein altes Programm (ohne Maven o.ä.) über IntelliJ starte läuft alles reibungslos, deshalb wundert es mich, dass nicht mal das in dem neu aufgesetzten Projekt funktioniert.

Hier der Code der Main Methode

Java:
package MainWindow;

import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.stage.Stage;
import java.io.IOException;

public class Main extends Application {

    @FXML
    private ScrollPane root;
    public Stage window;

    @Override
    public void start(Stage primaryStage) throws IOException {

        window = primaryStage;
        FXMLLoader loader = new FXMLLoader(Main.class.getResource("/MainWindow/MainWindow.fxml"));

        this.root = loader.load();

        MainWindowController mwc = loader.getController();
        mwc.setMain(this);

        Scene scene = new Scene(root);
        window.setTitle("Projekt");
        window.setScene(scene);
        window.show();
    }


    public static void main(String[] args) { launch(args); }
}

und hier mein MainWindowController

Java:
package MainWindow;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.layout.AnchorPane;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

public class MainWindowController implements Initializable {
    
    @FXML
    private AnchorPane anchorPaneMainWindow;

    private Main main;

    public void setMain(Main main) {
        this.main = main;
    }



     //Die AnchorPane mit dem TreeView etc. wird in das MainWindow geladen
    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        Node node;
        try {
            node = (Node) FXMLLoader.load(getClass().getResource("../TreeView/TreeView.fxml"));
            anchorPaneMainWindow.getChildren().setAll(node);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  
}
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Ich würde das als normale Startschwierigkeiten einstufen. Sobald Du damit (build tools) warm wirst, wirst Du es nicht mehr anders machen.

Habe mir nur den Anfang des Videos angesehen und halte es bereits für nicht gut. Du kannst mit IntelliJ direkt ein neues Maven Projekt anlegen und musst nicht den Umweg über ein Java Projekt machen.

Also:
1594290751948.png

1594290781598.png

1594290794673.png

1594290812423.png


IntelliJ macht dann im Hintergrund nichts anderes als was ich in dem Beitrag den ich verlinkt habe geschrieben habe.
Bash:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=RELEASE -DgroupId=org.example -DartifactId=project-name -Dversion=1.0-SNAPSHOT

Und so sollte die Applikation bereits baubar sein. Dazu einfach
1594291023268.png


Die pom.xml sollte wie folgt aussehen.
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>project-name</artifactId>
<version>1.0-SNAPSHOT</version>

<name>project-name</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/curren...ndings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

Und die musst Du jetzt nur noch anpassen, wie in meinem anderen Link geschrieben.

Alternativ kannst Du auch das Projekt von @mrBrown nehmen https://gitlab.com/mrBrown/javafx-11-demo. Damit könntest Du starten, bis Du die Startschwierigkeiten hinter Dir hast.
 
L

Lukas257

Mitglied
Danke für die schnelle Antwort, das werde ich demnächst versuchen!

Eine kurze Frage noch:
Was genau meinst du mit

Bash:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=RELEASE -DgroupId=org.example -DartifactId=project-name -Dversion=1.0-SNAPSHOT

bzw. wo genau muss ich das eingeben? Einfach in die Eingabeaufforderung?
Ich bin was das Programmieren angeht ein ziemlicher Neuling, bitte verzeih mir die "blöden" Fragen :D
Java an sich klappt schon ganz gut, aber das Drumherum mit Builden, Bashes etc. ist absolutes Neuland...

Viele Grüße,
Lukas
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Eine kurze Frage noch:
Was genau meinst du mit

Bash:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=RELEASE -DgroupId=org.example -DartifactId=project-name -Dversion=1.0-SNAPSHOT
bzw. wo genau muss ich das eingeben? Einfach in die Eingabeaufforderung?
Ja, aber der Befehl geht nur, wenn Maven auch in der Environment Variablen Path eingetragen ist. Über IntelliJ geht es auch ohne, da kümmert sich die IDE um den Pfad, also versuch lieber erst mal diese Variante.

Ich bin was das Programmieren angeht ein ziemlicher Neuling, bitte verzeih mir die "blöden" Fragen :D
Java an sich klappt schon ganz gut, aber das Drumherum mit Builden, Bashes etc. ist absolutes Neuland...
Das wird schon noch. Gerade am Anfang kann einen die Informationsflut erschlagen.
Du musst Dich hier nicht entschuldigen, dazu ist das Forum doch da. Ich wäre nicht hier, wenn ich nicht helfen wollte.
 
L

Lukas257

Mitglied
Hi Sascha (und alle anderen),

ich habe mal ein bischen weiter probiert und bin auch ein Stück weiter gekommen.

Ich kriege mit Maven eine .jar gebuildet die auch ausgeführt werden kann. Dabei gibt es jetzt aber ein Problem und zwar folgende Fehlermeldung:
"java.io.FileNotFoundExcpetion: \Fonts\GenBasB.ttf ..."

Was das bedeutet weiß ich. Diese Schriftart nutze ich mit pdfbox um einen PDF-Datei zu erstellen und gebe Sie im Programm wie folgt an:

Java:
InputStream inputfont = new FileInputStream("src\\Fonts\\GenBasB.ttf");
PDType0Font font = PDType0Font.load(document, inputfont );


Das scheint nun nicht mehr zu funktionieren (wenn ich das Programm aus IntelliJ heraus starte läuft es einwandfrei). Ich habe bis jetzt keinen anderen Weg gefunden die Exception verschwinden zu lassen.
Es scheint mir so, als wäre das ein trivialer Fehler (es muss ja an dem Pfad o.ä. liegen), aber bis jetzt hat keine Eingabe funktioniert.

Hat hier jemand Rat?

Viele Grüße und Vielen Dank für die Hilfe!

EDIT:

Ich habe eine Lösung gefunden:
Java:
InputStream inputtext = TreeViewController.class.getResourceAsStream("/Fonts/GentiumPlus-R.ttf");
und die .jar funktioniert wie sie es soll.

Darum aus dieser jar eine eine exe zu machen kümmere ich mich nächste Woche. Dann melde ich mich bestimmt nochmal :D
Schon mal schönes Wochenende!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JavaFX Installation unter IntelliJ IDEA AWT, Swing, JavaFX & SWT 5
T JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
B JavaFX openjfx11: intelliJ unter Ubuntu 18.10 kann nicht auflösen AWT, Swing, JavaFX & SWT 4
Cromewell JavaFX Standalone mit Maven (Jlink) AWT, Swing, JavaFX & SWT 12
G SWT Standalone WindowsXP AWT, Swing, JavaFX & SWT 4
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
H Swing HUD in externes Programm einblenden AWT, Swing, JavaFX & SWT 7
R Japaner koennen mein Programm nicht nutzen..? AWT, Swing, JavaFX & SWT 11
J Programm benötigt letzten Feinschliff.... ;) AWT, Swing, JavaFX & SWT 14
L Fenster das Klicks an dahinterliegendes Programm übergibt? AWT, Swing, JavaFX & SWT 4
S Splash Screen / "Loading" Anzeige im Programm AWT, Swing, JavaFX & SWT 27
N RCP/SWT View durch Programm auf 2. Bildschirm verschieben AWT, Swing, JavaFX & SWT 2
T Programm in die Taskleiste AWT, Swing, JavaFX & SWT 3
I Swing - Problem mit ActionListener (Programm bleibt stehen) AWT, Swing, JavaFX & SWT 2
P DEFAULT_CLOSE_OPERATION bei folgendem Programm nicht einz. AWT, Swing, JavaFX & SWT 5
P SWT: KeyEvents abfangen, wenn Programm minimiert ist? AWT, Swing, JavaFX & SWT 5
D Schrift im Programm ändern? AWT, Swing, JavaFX & SWT 2
A Programm automatisch in den Vordergrund AWT, Swing, JavaFX & SWT 5
P Programm terminiert nicht (unter Eclipse) AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben