kanikamaboco
kanikamaboco

Reputation: 31

I read the error and can't figure out the solution. Why am I getting a "javafx.fxml.LoadException"?

When I run the following code in eclipse with java 18 I get an error. Please Help. The fxml is generated using the scene builder. I read the error, but I don't understand the solution. In Main.fxml he thought everything was fine until line 9.

I used this video as a reference. https://youtu.be/N3LZM4WFHBY?list=PLZPZq0r_RZOM-8vJA3NQFZB7JroDcMwev

Main.java:

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 {
    @Override
    public void start(Stage primaryStage) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
            Scene scene = new Scene(root);
            primaryStage.setResizable(false);
            
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

Controller.java:

package application;

import java.awt.event.ActionEvent;

public class Controller {
    
    public void up(ActionEvent e) {
        System.out.println("UP");
    }   
    public void down(ActionEvent e) {
        System.out.println("DOWN");
    }   
    public void right(ActionEvent e) {
        System.out.println("RIGHT");
    }   
    public void left(ActionEvent e) {
        System.out.println("LEFT");
    }
    
}

Main.fxml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
   <children>
      <Button layoutX="286.0" layoutY="14.0" mnemonicParsing="false" onAction="#up" text="UP" />
      <Button layoutX="536.0" layoutY="188.0" mnemonicParsing="false" onAction="#right" text="RIGHT" />
      <Button layoutX="273.0" layoutY="361.0" mnemonicParsing="false" onAction="#down" text="DOWN" />
      <Button layoutX="14.0" layoutY="188.0" mnemonicParsing="false" onAction="#left" text="LEFT" />
   </children>
</AnchorPane>

Error:

javafx.fxml.LoadException: 
/C:/Users/suyak/eclipse-workspace/Message/bin/application/Main.fxml:9

    at [email protected]/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2707)
    at [email protected]/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:933)
    at [email protected]/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:981)
    at [email protected]/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:230)
    at [email protected]/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:755)
    at [email protected]/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3331)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3287)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3255)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3227)
    at [email protected]/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3203)
    at [email protected]/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3196)
    at FirstJavaFX/application.Main.start(Main.java:14)
    at [email protected]/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
    at [email protected]/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
    at [email protected]/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at [email protected]/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
    at [email protected]/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at [email protected]/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at [email protected]/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: Controller
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at [email protected]/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:931)
    ... 22 more

Upvotes: 0

Views: 737

Answers (1)

kanikamaboco
kanikamaboco

Reputation: 31

Slaw posted a comment:

You can solve this either by using fx:controller="application.Controller" (the fully qualified name of your controller class) or, I believe, by adding an <?import application.Controller?> instruction to your FXML file. You also need to change your controller class to import javafx.event.ActionEvent instead of the AWT equivalent (that's not related to your current error, but will prevent a future error from occurring).

Writing fx:controller="application.Controller" fixed it.

Upvotes: 3

Related Questions