Nastavení JavaFX

JavaFX je multiplatformní GUI toolkit pro Java a původně byl zamyšlen coby nástupce GUI knihovny Java Swing zejména pro vytvoření internetových aplikací. Vývoj ovšem pokračoval jiným směrem (nástup technologií založených na JavaScript+HTML+CSS), a tak, přestože v současné době je JavaFX nejmodernějším nástrojem na tvorbu GUI v Java, po verzi 1.8 byl vyřazen ze standardní distribuce Java SDK. O jeho další vývoj se stará společnost Gluon a je dostupné na stránkách OpenJFX. Za této situace je celkem pochopitelné, že při vytváření první vzorové aplikace v prostředí NetBeans (jehož vlastník se po verzi 8 taktéž změnil ze společnosti Oracle na Apache Foundation) v současné době (březen 2020) narazíme na určité potíže. Následující poznámky by měli ulehčit jejich překonání.

Vytvořme tedy první program (analogie „Hello world“) JavaFX v prostředí NetBeans 11.3. Vyžaduje po „naklikání“ vzorového projektu ještě několik drobných úprav podle toho jestli používáme verzi Java 1.8 (připomínám, že je to poslední verze jež v Oracle distribuci obsahoval Java FX, a verze, pro nějž jsou koncipovány materiály předmětu PJV) nebo pro modernější Java 13.

V rámci předmětu PJV vytvářejte pouze Maven projekty! Usnadníte tím správu závislostí pro sebe a - v případě semestrálního projektu - i pro cvičícího!

NetBeans

Doporučení:

V případě potíží doporučuji upravit soubor netbeans.conf v podadresáři etc instalačního adresáře NetBeans tak, aby aplikace explicitně používala nejnovější instalovanou verzi Java SDK:

netbeans_jdkhome=“vase/cesta/k/jdk”

např.

netbeans_jdkhome=“C:\Program Files\Java\jdk-13.0.1”

Java 1.8 v NetBeans

Prozatím jedniná možnost pod Ubuntu v počítačové učebně.

Vytvořit nový projekt:

File /New Project / Java with Maven / Simple (resp. FXML) JavaFX Maven Archetype (Gluon)

Nastavit:

Project Properties / Sources / Source/Binary Format nastavit na 1.8

Project Properties / Build-Compile / Java Platform nastavit na JDK 1.8 (Případně ho přidat přes tlačítko Manage Java Platforms)

Chyba při kompilaci:

Fatal error compiling: invalid flag: –module-path

Řešení:

Odstranit soubor module-info.java (NetBeans ho ukazuje v <default package>)

Ze souboru pom.xml odstranit sekci <build>…</build> a <dependencies>…</dependencies>

Je možné odstranit také soubor nbactions.xml.

V jednom z projektů může dojít k chybě:

…cannot find symbol

Je pak nutné nahradit klíčová slova var - jež Java 1.8 ještě nezná - aktuálním typem proměnné (v mém případě String, String, Label, Scene)

Java 13 (a vyšší) v NetBeans

Vytvořit nový projekt:

File / New Project / Java with Maven / Simple (or FXML) JavaFX Maven Archetype (Gluon)

Nejde spustit, hlásí:

JavaFX runtime components are missing, and are required to run this application

Řešení:

A. spoléháme-li na závislosti z repozitáře Maven (a nemáme instalovaný runtime JavaFX) můžeme

v Project Properties / Actions / Run project a/nebo Run file via main() změnit Execute Goals na

clean javafx:run

a vymazat obsah pole Set properties.

(podrobný popis najdete zde: https://openjfx.io/openjfx-docs/#IDE-NetBeans sekce „Non-modular with Maven“)

B. pokud je v OS instalovaná identická verze runtime JavaFX i mimo systém Maven

lze do Project Properties / Run / VM Options doplnit

--module-path "vase/cesta/k/javafx-sdk-13.0.1/lib" --add-modules=javafx.controls,javafx.fxml

např. ve Windows:

--module-path "C:/Program Files/Java/javafx-sdk-13.0.1/lib" --add-modules=javafx.controls,javafx.fxml

nebo v Ubuntu:

--module-path /opt/java/javafx/javafx-sdk-14/lib --add-modules=javafx.controls,javafx.fxml

(podrobný popis najdete na stránce: https://openjfx.io/openjfx-docs/#IDE-NetBeans sekce „Non-modular from IDE“)

Když projekt ani nekompiluje, je namístě kontrolovat závislosti (dependencies), a pokud je třeba, přidat Maven dependency:

Group Id: org.openjfx Artifact Id: javafx-controls Version: např. 13

tak, aby se v pom.xml objevila sekce (nebo tam přímo doplnit):

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>13</version>
    </dependency>
</dependencies>

Pokud vytvářáme FXML projekt, je třeba obdobně přidat i závislost javafx-fxml.

Java 15 v IntelliJ Idea

Při vytváření nového projektu postupujme podle návodu zde v sekci JavaFX and IntelliJ, Non-modular with Maven:

Z nabídky zvolíme “New Project”, v dialogu „ProjectSDK:“ 15.0.1 (měli by fungovat i jiné verze nad 11), zaškrtnout „Create from achetype“. Při prvním zakládání projektu JavaFX klik na tlačítko „Add Archetype“, v dialogu vyplnit:

„GroupId:“ org.openjfx,

„ArtifactId:“ javafx-archetype-simple (případně javafx-archetype-fxml, pokud vytváříme FXML projekt)

„Version:“ 0.0.6

„Repository:“ se nemusí zadávat (implicitní hodnota se nastaví podle „File“→„Settings“→„Build, Execution, Deployment“→ „Remote Jar Repositories“)

Ukázkový projekt s podobným obsahem pom.xml:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>ideafxtest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>13</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.6</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running -->
                        <!-- Usage: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>org.example.App</mainClass>
                            <commandlineArgs>pripadny seznam argumentu</commandlineArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

by měl kompilovat bez problémů.


První spuštění

Z pravého panelu „Maven“ → „Plugins“ → „javafx“ → „javafx:run“

Další běhy:

V okně aktuální konfigurace (vpravo nahoře, vlevo vedle zelené šipky „Run“) vybrat: nazev_aplikace[javafx:run]


Ladění

Z pravého panelu „Maven“ → „Plugins“ → „javafx“ → „javafx:run“ → pravý klik, z pop-up vybrat Debug nazev_aplikace[javafx:run]

V okně „Run“ vidíme:

Listening for transport dt_socket at address: 8000 vpravo pak Attach debugger, toto poklepat, nebo z hlavní nabídky Run vybrat Attach to Process a poté zvolit aplikaci pro ladění.


Rozsáhlý seznam rad, jak začít s JavaFX pro různé kombinace vývojových prostředí a nástrojů najdete v dokumentaci Open JFX.

courses/b0b36pjv/tutorials/06/javafx.txt · Last modified: 2022/05/26 09:10 by seredlad