Reputation: 31
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
Reputation: 31
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 importjavafx.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