В JavaFX попытка вызвать метод из вложенного контроллера в основной контроллер дает мне исключение NullPointerException.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 В JavaFX попытка вызвать метод из вложенного контроллера в основной контроллер дает мне исключение NullPointerException.

Сообщение Anonymous »

Сейчас я создаю простое приложение для чтения файла .txt и визуализации трехмерных точек на сцене.
Это мой текущий код:
----------Main.java----------

Код: Выделить всё

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();

FXMLLoader importMenuLoader = new FXMLLoader(getClass().getResource("FXML/ImportMenu.fxml"));
importMenuLoader.load();
ImportMenuController importMenuController = importMenuLoader.getController();

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);
}
}
---------- Main.fxml---------- ----------FileMenu.fxml---------- ----------ImportMenu.fxml---------- ----------MainController.java----------

Код: Выделить всё

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());
}
}
----------FileMenuController----------

Код: Выделить всё

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() {
}
}
----------ImportMenuController----------

Код: Выделить всё

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;
}

@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);
}
}
}
}
}
Класс Node.java — это всего лишь расширение Point3D, и его бессмысленно добавлять к и без того длинному сообщению.
Сцена загружается нормально, но возникает исключение NullPointerException всякий раз, когда я нажимаю на файл .txt.
В частности, this.mainController внезапно становится нулевым после того, как файл был выбран.
Я действительно пытаюсь найти проблему здесь и любая помощь буду очень признателен.

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-controll
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»