Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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>
                        </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: 2021/04/25 11:34 by seredlad