wake-up-neo.com

JavaFX-Implementierungsbibliothek wurde im aktiven JDK nicht gefunden

Ich migriere zu OpenJDK 11 und OpenJFX 11. Ich habe beide erfolgreich von der Quelle aus erstellt und gemäß dem OpenJFX-Wiki das Argument --with-import-modules = [path_to_modular_sdk] zum Erstellen des JDK verwendet. alles läuft gut, bis ich versuche, ein einfaches "Hello World" -Testprojekt in Apache Netbeans 9 zu erstellen; An dieser Stelle erhalte ich die folgende Fehlermeldung: " Die JavaFX-Implementierungsbibliothek wurde im aktiven JDK nicht gefunden." Ich habe versucht, nach Informationen zu diesem Thema zu suchen, aber nichts relevantes finden. Wenn irgendjemand Licht auf die Ursachen werfen könnte, würde ich das sehr begrüßen. Vielen Dank für jede Hilfe. Patrick.

5
PatrickJ

@Mipa weist darauf hin, dass Sie weder Java 11 noch JavaFX 11 erstellen müssen, um Ihre vorhandenen Projekte zu migrieren.

Wie bei Apache NetBeans 9.0 unterstützen die aktuellen Ant-Build-Dateien für JavaFX-Projekte JavaFX 11 noch nicht. Es sucht immer nach der JavaFX-Dose und hört auf, wenn es nicht gefunden wird. Dies ist ein Erbe aus früheren Zeiten (vor Java 8), als JavaFX nicht Teil des JDK war und Sie das Glas manuell hinzufügen mussten. 

Wenn Sie beispielsweise versuchen, ein neues JavaFX-Projekt zu erstellen, erhalten Sie folgende Fehlermeldung:

netbeans

Dies bedeutet jedoch nicht, dass Sie JavaFX 11 nicht mit oder ohne NetBeans 9.0 ausführen können.

Läuft auf Terminal

Sie können Ihr Java/JavaFX 11-Projekt von einem Terminal aus ausführen. Sie können diesem Erste Schritte Leitfaden für eine detaillierte Schritt für Schritt folgen. 

Kurz gesagt, alles was Sie brauchen ist:

export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.Java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX

wo HelloFX.Java ist:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String version = System.getProperty("Java.version");
        Label l = new Label ("Hello, JavaFX 11, running on " + version);
        Scene scene = new Scene(new StackPane(l), 300, 200);
        stage.setScene(scene);
        stage.show();
    }

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

}

Modulares Projekt

Erstellen Sie ein modulares Projekt in NetBeans 9.0 und fügen Sie ein Modul hinzu (der Einfachheit halber habe ich es javafx11 genannt, dies ist kein empfohlener Name).

Bevor Sie den Code hinzufügen, fügen Sie dem Modulpfad die JavaFX-Bibliothek hinzu.

JavaFX library

Diese Bibliothek ist nur der Ordner unter meinem lokalen Download von JavaFX: /Users/<user>/Downloads/javafx-sdk-11/lib/. Wenn Sie es selbst gebaut haben, können Sie natürlich auf diesen Ort zeigen.

Jetzt kann ich das Modul definieren:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

und fügen Sie die obige HelloFX-Klasse zum javafx11-Paket hinzu.

Jetzt läuft das Projekt perfekt.

Selbst wenn Sie weiterhin ant verwenden, werden die Build-Dateien in diesem Fall auf die Änderungen des Modulpfads aktualisiert, und es gibt keine JavaFX-spezifischen Informationen, sodass das Projekt problemlos ausgeführt werden kann.

Java-Projekt

Wenn das modulare Projekt funktioniert, funktioniert ein Java-Projekt regular auch auf NetBeans 9.0.

Erstellen Sie ein Java - Projekt (wiederum kein JavaFX - Projekt), fügen Sie die JavaFX-Bibliothek wie oben beschrieben zum Modulpfad hinzu, und Sie müssen diese beiden Optionen VM jetzt zum Kompilieren hinzufügen und läuft:

 --module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls

Das Projekt sollte gut laufen.

JavaFX 11

Maven

Ein anderer Ansatz ist die Verwendung von Maven oder Gradle anstelle von Ameise.

Erstellen Sie einfach ein Maven -> JavaFX-Projekt, ändern Sie die Datei pom.xml und fügen Sie die JavaFX-Abhängigkeiten hinzu:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11-ea+23</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11-ea+23</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>11</release>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1.1</version>
                    <!--  Use newer version of ASM  -->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>Java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>javafx11.HelloFX</mainClass>
                </configuration>
        </plugin>
    </plugins>
</build>

Reinigen, Erstellen und Ausführen von NetBeans. Es sollte einwandfrei funktionieren.

Für Gradle kann dasselbe gemacht werden, wenn Sie das Gradle-Plugin für NetBeans hinzufügen.

8
José Pereda

Sie sagen, Sie migrieren zu OpenJDK11/OpenJFX11, aber warum starten Sie dieses Unterfangen, indem Sie sowohl das JDK als auch das JFX selbst erstellen? Es wäre viel einfacher, einen EA-Build von hier http://jdk.Java.net/11/ und hier http://jdk.Java.net/openjfx/ .__ herunterzuladen. Mit JDK11 beginnend ist JavaFX nicht mehr Bestandteil des JDK und kann daher separat vom JDK erstellt werden. Ich bin nicht sicher, ob Ihre Bauanleitung auf dem neuesten Stand ist.

0
mipa

Es ist ein Problem mit Netbeans 9. Ich hatte das Sun JDK, jetzt Oracle JDK, viele Jahre mit Netbeans verwendet. In Netbeans 7.2 gab es eine Option, JFX-JAR-Dateien manuell hinzuzufügen. Dann wurde JFX in Oracle JDK8 eingebettet, und diese Option ist jetzt nicht verfügbar. Vor einigen Wochen wurde ich darüber informiert, dass Oracle JDK im nächsten Jahr nicht mehr kostenlos sein wird. Daher begann ich mit der Migration zu Open JDK10 und I Ich habe das gleiche Problem wie Sie. Das liegt daran, dass Open JFX nicht in Open JDK eingebettet ist. Wenn Sie Oracle JDK11 (bereits GA) verwenden, haben Sie keine Probleme beim Erstellen von JFX-Apps. Das Problem ist, wenn Sie in NetBeans als Java-Plattform ein Open JDK festlegen. Es erwartet, dass sich JFX im JDK selbst befindet, aber Netbeans fragt Sie nicht nach einem JFX-Ordner oder ähnlich wie in früheren Versionen.

0
bichoFlyer