web-dev-qa-db-fra.com

Bibliothèque de déploiement JavaFX introuvable dans le JDK actif

Je migre vers OpenJDK 11 et OpenJFX 11. J'ai construit avec succès à partir du code source et, conformément au wiki OpenJFX, a utilisé l'argument --with-import-modules = [path_to_modular_sdk] pour créer le JDK. tout se passe bien jusqu'à ce que j'essaye de construire un simple projet de test "Hello World" dans Apache Netbeans 9; à ce stade, le message d'erreur suivant s'affiche: " Bibliothèque de déploiement JavaFX non trouvée dans le JDK actif ". J'ai essayé de chercher des informations à ce sujet, mais je n'ai rien trouvé de pertinent. Si quelqu'un pouvait faire la lumière sur ce qui le cause, j'apprécierais beaucoup ... Merci pour toute aide ... Patrick.

5
PatrickJ

Comme @mipa le souligne, vous n'avez pas besoin de construire Java 11 ni JavaFX 11 pour migrer vos projets existants.

En ce qui concerne Apache NetBeans 9.0, les fichiers de construction ant actuels du projet JavaFX ne prennent pas encore en charge JavaFX 11. Il recherche toujours le jar JavaFX et s’arrêtera s’il n’est pas trouvé. C'est en quelque sorte un héritage de l'ancien temps (avant Java 8), lorsque JavaFX ne faisait pas partie du JDK et que vous deviez ajouter le fichier jar manuellement. 

Par exemple, lorsque vous essayez de créer un nouveau projet JavaFX, vous obtiendrez cette erreur:

netbeans

Mais cela ne signifie pas que vous ne pouvez pas exécuter JavaFX 11, avec ou sans NetBeans 9.0.

En cours d'exécution sur le terminal

Vous pouvez exécuter votre projet Java/JavaFX 11 à partir d'un terminal. Vous pouvez suivre ce commencer guide pour une étape détaillée. 

En un mot, tout ce dont vous avez besoin est:

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

HelloFX.Java est:

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();
    }

}

Projet modulaire

Créez un projet modulaire sur NetBeans 9.0 et ajoutez un module (par souci de simplicité, je l’ai nommé javafx11, qui n’est pas un nom recommandé).

Avant d'ajouter le code, ajoutons la bibliothèque JavaFX au chemin du module.

JavaFX library

Cette bibliothèque n’est que le dossier sous mon téléchargement local de JavaFX: /Users/<user>/Downloads/javafx-sdk-11/lib/. Bien sûr, si vous l'avez construit vous-même, vous pouvez indiquer cet emplacement à la place.

Maintenant je peux définir le module:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

et ajoutez la classe HelloFX ci-dessus au package javafx11.

Maintenant, le projet fonctionnera parfaitement.

Même si vous utilisez toujours ant, dans ce cas, les fichiers de construction sont mis à jour avec les modifications apportées au chemin du module et il n'y a rien de spécifique à JavaFX, le projet s'exécute donc sans problème.

Projet Java

Si le projet modulaire fonctionne, un projet Java normal fonctionnera également sur NetBeans 9.0.

Créez un projet Java (encore une fois, pas un projet JavaFX), ajoutez la bibliothèque JavaFX au chemin du module comme ci-dessus et vous devrez maintenant ajouter ces options VM pour la compilation et en cours d'exécution:

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

Le projet devrait bien se dérouler.

JavaFX 11

Maven

Une autre approche consiste à utiliser Maven ou Gradle à la place de ant.

Créez simplement un projet Maven -> JavaFX, modifiez le fichier pom.xml et ajoutez les dépendances JavaFX:

<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>

Nettoyer, compiler et exécuter à partir de NetBeans, cela devrait fonctionner correctement.

Pour Gradle, la même chose peut être faite, si vous incluez le plugin Gradle pour NetBeans.

8
José Pereda

Vous dites que vous migrez vers OpenJDK11/OpenJFX11, mais pourquoi commencez-vous cet effort en créant vous-même le JDK et le JFX? Il serait beaucoup plus facile de télécharger une version EA à partir d’ici http://jdk.Java.net/11/ et ici http://jdk.Java.net/openjfx/ De plus, à partir de JDK11, JavaFX ne fait plus partie du JDK. Il peut donc être construit séparément du JDK. Je ne suis pas sûr que vos instructions de construction soient à jour.

0
mipa

C'est un problème avec Netbeans 9. J'utilisais le JDK Sun, maintenant le JDK Oracle depuis de nombreuses années avec Netbeans. Dans Netbeans 7.2, il était possible d’ajouter manuellement les fichiers JAR JFX. Ensuite, JFX a été intégré à Oracle JDK8 et cette option n’est pas disponible pour le moment ..__ Il y a quelques semaines, j’ai appris que le JDK Oracle ne serait plus disponible l’année prochaine. J'ai donc commencé à migrer vers Open JDK10 et moi 'ai le même problème que vous. En effet, Open JFX n'est pas intégré à Open JDK. Si vous essayez avec Oracle JDK11 qui est déjà GA, vous n'aurez aucun problème à créer des applications JFX. Le problème est que lorsque vous définissez un JDK ouvert dans NetBeans en tant que plate-forme, il s'attend à ce que JFX soit dans le JDK lui-même, mais Netbeans ne vous demandera pas un dossier JFX ou quelque chose comme dans les versions précédentes.

0
bichoFlyer