Dzień dobry
Używając więcej niż 1 okna natrafiłem na ciekawy problem. Otóż jak posiadam główną klasę sterującą pierwszego okna to wszystko działa dobrze. Mogę normalnie odwoływać się do pól należących do tego okna. Natomiast jak spróbuje połączyć drugie okno do tej samej klasy sterującej to nie mogę już korzystać z pól, które zależą do drugiego okna, bo wyskakuje wyjątek java.lang.NullPointerException. Podaje poniżej przykładowy kod w którym występuje opisana sytuacja. Proszę o pomoc. Każda odpowiedź mile widziana.
Klasa Main
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public void window() throws IOException {
Stage stage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("window.fxml"));
stage.setTitle("Hello World");
stage.setScene(new Scene(root, 300, 275));
stage.showAndWait();
}
public static void main(String[] args) {
launch(args);
}
}
Klasa Sterująca
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import java.io.IOException;
public class Controller {
@FXML private Button button;
@FXML private TextField text;
@FXML private Label label;
public void setText() throws IOException {
label.setText(text.getText());
new Main().window();
}
}
Pierwsze okno (FXML)
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.TextField?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<Button fx:id="button" onAction="#setText" layoutX="14.0" layoutY="14.0" mnemonicParsing="false" text="Button" />
<TextField fx:id="text" layoutX="100.0" layoutY="14.0" />
</children>
</AnchorPane>
Drugie okno (FXML)
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?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/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<Label fx:id="label" layoutX="127.0" layoutY="67.0" text="Label" />
</children>
</AnchorPane>