Dies ist mein aktueller Code:
Main.java
Code: Select all
import controllers.ImportMenuController;
import controllers.MainController;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader mainLoader = new FXMLLoader(getClass().getResource("FXML/Main.fxml"));
Parent root = mainLoader.load();
MainController mainController = mainLoader.getController();
if (mainController != null) {
System.out.println("mainController has been loaded correctly..");
}
FXMLLoader importMenuLoader = new FXMLLoader(getClass().getResource("FXML/ImportMenu.fxml"));
importMenuLoader.load();
ImportMenuController importMenuController = importMenuLoader.getController();
if (importMenuController != null) {
System.out.println("importMenuController has been loaded correctly.");
} else {
System.err.println("importMenuController has not been loaded correctly.");
}
assert importMenuController != null;
importMenuController.setMainController(mainController);
importMenuController.setMainController(mainController);
Scene scene = new Scene(root, 1920, 1080);
primaryStage.setTitle("Test");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Code: Select all
Code: Select all
Code: Select all
Code: Select all
package controllers;
import javafx.fxml.FXML;
import javafx.scene.Group;
import javafx.scene.control.Menu;
import node.Node;
public class MainController {
@FXML private Menu fileMenu;
@FXML private FileMenuController fileMenuController;
@FXML private Group centerGroup;
@FXML
public void initialize() {
}
public void addNodeToScene(double x, double y, double z, int ID) {
Node node = new Node(x, y, z, ID);
centerGroup.getChildren().add(node.getSphere());
}
}
Code: Select all
package controllers;
import javafx.fxml.FXML;
import javafx.scene.control.Menu;
public class FileMenuController {
@FXML private Menu importMenu;
@FXML private ImportMenuController importMenuController;
@FXML
public void initialize() {
}
}
Code: Select all
package controllers;
import javafx.fxml.FXML;
import javafx.stage.FileChooser;
import java.io.*;
public class ImportMenuController {
private MainController mainController;
@FXML
public void initialize() {
}
public void setMainController(MainController mainController) {
this.mainController = mainController;
if (mainControl != null) {
System.out.println("mainController has been loaded correctly.");
}
}
@FXML
public void onImportSolverDeck() {
try {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Text File (.txt)", "*.txt"));
File selectedFile = fileChooser.showOpenDialog(null);
if (selectedFile != null) {
femLoader(selectedFile);
}
} catch (IOException e) {
System.out.println("Unable to read the selected file: " + e.getMessage());
}
}
private void femLoader(File femFile) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(femFile))) {
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("GRID")) {
String[] parts = line.split("\\s+");
int ID = Integer.parseInt(parts[1]);
double x = Double.parseDouble(parts[2]);
double y = Double.parseDouble(parts[3]);
double z = Double.parseDouble(parts[4]);
mainController.addNodeToScene(x, y, z, ID);
}
}
}
}
}
----------EDIT----------
Ich weiß, was eine NullPointerException in JavaFX ist, aber mainController ist nicht null, bevor die gewünschte Datei mit der onSolverDeckImport-Methode ausgewählt wird.
Ich habe einige if hinzugefügt Anweisungen in Main.java und der setMainController-Methode und alle drei geben mir den richtigen Controller.
mainController wird danach aus irgendeinem Grund tatsächlich null.