Netbeans und javafx

Juelin

Bekanntes Mitglied
Hallo,
mein Name ist Jürgen, ich bin 74 Jahre alt und Rentner aus Mannheim.
Ich lerne gerade Java mit dem Buch "Java programmieren lernen für Einsteiger" von Michael Bonacina.
Ich habe Windows 10, Java jdk-21 und Apache-NetBeans-21-bin-windows-x64 installiert.
In Netbeans habe ich "Java with Maven", "Java with Grandle" und "Java with Ant". (siehe Anhang bild1 bis bild3)
Frage: Was ist der Unterschied zwischen den drei Arten und welche nimmt man normaler weise?
Nun bin ich im Kapitel 12 javafx.
Wenn ich nun ein neues Projekt anlegen will und wähle "Java with Ant" und "JavaFX" (bild4)
kommt (bild5).
Wenn ich dann, wie vorgeschlagen eine neue Plattform anlegen will kommt (bild6 und bild7).
Keine Ahnung was ich machen muß?
Muss man irgend was downloaden und wenn ja von welcher URL?
Kann mir da jemand helfen?
Bitte mit genauer Beschreibung.
Danke für die Hilfe und Gruß
Jürgen
 

Anhänge

  • bild1.jpg
    bild1.jpg
    197,1 KB · Aufrufe: 0
  • bild2.jpg
    bild2.jpg
    160,3 KB · Aufrufe: 0
  • bild3.jpg
    bild3.jpg
    201,1 KB · Aufrufe: 0
  • bild4.jpg
    bild4.jpg
    185,5 KB · Aufrufe: 0
  • bild5.jpg
    bild5.jpg
    187,6 KB · Aufrufe: 0
  • bild6.jpg
    bild6.jpg
    149 KB · Aufrufe: 0
  • bild7.jpg
    bild7.jpg
    87,6 KB · Aufrufe: 0
Gehen wir die Punkte einmal der Reihe nach durch:

1. Herzlich willkommen im Forum und schön, dass Du zu uns ins Forum gefunden hast. Ich wünsche Dir viel Spaß und viele Erfolge mit Java und JavaFX.

2. Maven, Gradle und Ant
Bei den drei Dingen handelt es sich um sogenannte Build Tools. Ant ist das älteste und von dem würde ich Dir abraten, da es viele Features schlicht nicht hat wie z.B. das automatische Laden von Abhängigkeiten (Dafür gibt es dann aber noch ergänzende Tools, aber das macht alles direkt komplizierter)

Maven und Gradle sind die Build Tools, die derzeit im Java Bereich den Markt beherrschen. Dabei ist Maven etwas älter und hat den großen Vorteil, dass hier alles in einem sauber definierten XML Konstukt abgelegt wird. Bei Gradle hat man statt dessen eine Scriptsprache, in der das Projekt beschrieben wird, was es extrem leistungsfähig macht aber aus meiner Sicht einfach auch zu kompliziert macht.

Mein Ratschlag wäre daher ganz klar: Greif zu Maven. Das bietet Dir den schnellsten Einstieg.

3. JavaFX SDK
Du hast die Probleme gehabt, da Du Ant gewählt hattest. Damit wurden keine Abhängigkeiten automatisch geladen. Statt dessen wird von Dir erwartet, ein JavaFX SDK zu installieren und dann die Details der Installation einzutragen.
==> Nutze bitte Maven, dann solltest Du das Problem nicht mehr haben.

Ich kenne Dein Buch nicht. Evtl. sind - wen Du Maven wählst - nicht mehr alle Dinge 1:1 anwendbar. Das sind aber alles Dinge auf Projekt-Verwaltungs-Ebene und betrifft nicht den Java Code selbst. Daher sollte es unkritisch sein und du dürftest hier im Forum die Unterstützung finden, die Du brauchst.

Maven ist besonders gut, da das ganze Projekt in einem einzigen Text-File beschrieben ist. Daher ist es einfach, dieses z.B. im Forum weiter zu geben. Probleme im Bereich der Projektverwaltung sind somit über das Forum sehr einfach und schnell behebbar.

Probiere also einmal die Maven Projekte aus und wenn Du in Probleme rennen solltest: Melde Dich einfach direkt wieder.
 
Hallo KonradN,
danke für Deine sehr ausführliche Antwort. Du hast Dir wirklich Mühe gegeben.
Gerne verwende ich Maven.
Problem ist nur, da ist kein JavaFX drin (siehe Anlage Bild1).
Wie krieg ich da JavaFX rein?
Danke nochmal und Gruß
Jürgen
 
Hallo Jürgen,

auf dem Foto sehe ich auch ein "Simple JavaFX Maven Archetype". Wenn Du das auswählst, dann solltest Du auch JavaFX als Abhängigkeiten mit drin haben.

Aber das kann man auch einfach in die pom.xml eintragen bzw. kopieren. Ich habe derzeit ein GitHub Template, in dem alles drin ist, was aus meiner Sicht wichtig ist. Das kann aber ganz am Anfang etwas zu viel sein.

Wenn Du ein einfaches Maven Projekt erstellst, dann kannst Du die pom.xml austauschen. Eine stark bereinigte Version für den Anfang wäre:
XML:
<?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>

    <!-- Diesen Block anpassen -->
    <groupId>de.kneitzel</groupId>
    <artifactId>javafxapp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <organization>
        <name>Java Forum</name>
    </organization>


    <!--In diesem Block solltest Du auch Werte anpassen ... -->
    <properties>
        <!-- Application Properties -->
        <link.name>${project.artifactId}</link.name>
        <launcher>${project.artifactId}</launcher>
        <appName>${project.artifactId}</appName>
        <main.class>de.kneitzel.Main</main.class>
        <java.version>17</java.version>
        <jar.filename>${project.artifactId}-${project.version}</jar.filename>

        <!-- Dependency versions -->
        <javafx.version>19.0.2.1</javafx.version>

        <!-- Plugin dependencies -->
        <javafx.maven.plugin>0.0.8</javafx.maven.plugin>

        <!-- other properties -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.release>${java.version}</maven.compiler.release>

    </properties>

    <dependencies>
        <!-- JavaFX dependencies -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>${javafx.version}</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>${javafx.version}</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>${javafx.version}</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>${javafx.version}</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-swing</artifactId>
            <version>${javafx.version}</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>${jar.filename}</finalName>
        <plugins>
            <!-- JavaFX Plugin to start application -->
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>${javafx.maven.plugin}</version>
                <configuration>
                    <mainClass>${main.class}</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Da sind einige JavaFX Abhängigkeiten drin und das javafx plugin.

Wenn Du das Maven Ziel javafx:run startest, dann sollte die Anwendung laufen.
 
Was neben dem Projekt fehlt, ist dann noch die eigentliche JavaFX Anwendung. Die schaust Du Dir aber dann wirklich am Besten auf GitHub an:
kneitzel/JavaFXMavenApp: Simple JavaFX App with Maven (github.com)

Die eigentliche Application ist eine Klasse, die von Application erbt:
JavaFXMavenApp/src/main/java/de/kneitzel/JavaFXApp.java at main · kneitzel/JavaFXMavenApp (github.com)
Dort findet sich dann Code, der das Hauptfenster aus einer fxml Datei lädt. Diese fxml kannst Du per SceneBuilder (von Gluon) editieren:
Scene Builder - Gluon (gluonhq.com)

Zu dem fxml gehört dann auch ein Controller. Das ist ggf. schon etwas viel auf einmal, aber Du kannst diese Klasse auch mit dem Code aus dem Buch ersetzen.

Ein wichtiger Hinweis bezüglich der Main Klasse:
Java:
package de.kneitzel;

/**
 * Another Main class as workaround when the JavaFX Application ist started without
 * taking care os Classloader Requirements of JavaFX. (Important when starting from inside NetBeans!)
 */
public class Main {
    /**
     * Additional main methode to start Application.
     * @param args Commandline Arguments.
     */
    public static void main(String[] args) {
        JavaFXApp.main(args);
    }
}
Das ist ein Workaround. Die JavaFX Runtime hat gewisse Probleme, wenn diese nicht ganz genau so geladen wird, wie sie es möchte und dann bekommt man eine Fehlermeldung, dass JavaFX fehlen würde. Das Problem kann man lösen, in dem man eine main Methode startet, die in einer Klasse ist, die nichts mit JavaFX zu tun hat. Das einfach nur als kleiner Hinweis - das kann Dir helfen, wenn Du die Anwendung über die IDE starten willst und Du eben so eine Fehlermeldung bekommst.
 
Hallo KonradN,
Danke, Du warst mir eine große Hilfe.
Das mit dem simple JavaFX Maven hat funktioniert.
Nochmals Danke für die Hilfe.
So Leute wie Du sind halt einfach Klasse.
Danke und Gruß
Jürgen
 

Zurück
Oben