web-dev-qa-db-fra.com

Erreur: impossible de trouver ou de charger l'application de classe principale. Principale causée par: Java.lang.NoClassDefFoundError: javafx / application / Application JDK 11

Je suis bloqué sur un problème très basique. J'ai créé un simple programme hello world en utilisant JavaFX qui fonctionne très bien sur JDK 1.8. Mais quand je passe au JDK-11, il lance l'exception suivante:

Error: Could not find or load main class application.Main
Caused by: Java.lang.NoClassDefFoundError: javafx/application/Application

Voici le code que j'ai écrit dans Eclipse.

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;


public class Main extends Application {

    private Scene theScene;
    @Override
    public void start(Stage primaryStage) {
try {

            FXMLLoader loader = new FXMLLoader(getClass().getResource("MyScene.fxml"));
            Parent mainPane = loader.load();


            theScene = new Scene(mainPane);
            primaryStage.setScene(theScene);
            primaryStage.show();

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void setTheScene(Scene theScene) {
        this.theScene = theScene;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
4
Shahrukh S.

J'ai rencontré le même problème sur Debian après la mise à niveau de Stretch vers Buster, mais maintenant, tout va bien:

Java --version

openjdk 11.0.4 2019-07-16

Pour exécuter une application Java-fx à l'aide d'un terminal, procédez comme suit:

  1. Installez openjfx (s'il n'est pas déjà installé):
    Sudo apt install openjfx

  2. Indiquez l'emplacement de la bibliothèque javafx:
    dpkg-query -L openjfx
    La sortie doit être comme ceci:

./usr/usr/share/usr/share/doc/usr/share/doc/openjfx /usr/share/doc/openjfx/TODO.Debian /usr/share/doc/openjfx/changelog.Debian.gz/usr/share/doc/openjfx/copyright/usr/share/openjfx/usr/share/openjfx/lib /usr/share/openjfx/lib/javafx.properties /usr/share/openjfx/lib/javafx.base.jar/usr/share /openjfx/lib/javafx.controls.jar /usr/share/openjfx/lib/javafx.fxml.jar /usr/share/openjfx/lib/javafx.graphics.jar /usr/share/openjfx/lib/javafafx.media .jar /usr/share/openjfx/lib/javafx.swing.jar /usr/share/openjfx/lib/javafx.web.jar

  1. Exécutez l'application jar en incluant le chemin javafx et les modules:
    Java --module-path $PATH_TO_OPENJFX-LIB --add-modules module_1,module_2,module_3,...,module_n -jar $PATH_TO_JAR_FILE

Exemple:

Java --module-path /usr/share/openjfx/lib --add-modules=javafx.controls,javafx.fxml,javafx.base,javafx.media,javafx.web,javafx.swing -jar '/home/lotfi/Documents/MyAppfolder/my_application.jar'
2
Lotfi Hocini

jdk 11 ne prend pas en charge javafx. Oracle l'a supprimé. Mais vous pouvez ajouter javafx à votre projet en utilisant Maven.

1
Alexandr Tkach