I have been stuck on this for hours. I don't know why my controller from JavaFX is pointing to null. I made a JavaFX GUI in scene builder
, added the controller class to my project with its appropriate skeleton code. But when I instantiate the controller in my start
method it is pointing to null.
App.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class App extends Application{
public static void main(String[] args) {
launch(args);
}
public static SampleController controller;
@Override
public void start(Stage stage) throws Exception {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("testProjectFx.fxml"));
Parent root = loader.load();
controller = (SampleController) loader.getController();
System.out.println("controller is : " + controller);
Scene scene = new Scene(root, 300, 300);
stage.setTitle("FXML Welcome");
stage.setScene(scene);
stage.show();
} catch(Exception e){
e.printStackTrace();
}
}
}
SampleController.java
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class SampleController {
@FXML
private Label firstLabel;
}
testProjectFx.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label fx:id="firstLabel" layoutX="314.0" layoutY="135.0" text="Label" />
</children>
</AnchorPane>
Error stacktrace
cd /home/hexaquarks/vscode/testProject ; /usr/bin/env /usr/lib/jvm/java-11-openjdk-amd64/bin/java --module-path /home/hexaquarks/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml,javafx.swing -Dfile.encoding=UTF-8 @/tmp/cp_s5yrrw0jqsav930qkowo7m19.argfile App
Aug. 11, 2021 1:30:27 P.M. javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 16 by JavaFX runtime of version 11.0.2
controller is : null
with folder tree:
Testproject
├── .vscode
├── bin
├── lib
└── src
├── App.java
├── SampleController.java
└── testProjectFx.fxml
I followed the instructions mentionned in here and here, and some other StackOverflow pages. I am reproducing the instructions exactly as they are mentioned but I still get my controller as null.
I am short of ideas, does anyone know what I am doing wrong?