【发布时间】:2016-06-29 12:09:21
【问题描述】:
Text.setText() 方法有点麻烦。它应该将String 名称设置为它的值。
FXML 代码有以下文字:
<Text fx:id="airlineName" strokeType="OUTSIDE" strokeWidth="0.0" text="Airline Name Goes Here" GridPane.rowIndex="1">
<font>
<Font size="17.0" />
</font>
</Text>
这是一段java代码:
@FXML
Text airlineName;
private void loadNewWindow(String resource, Button button) throws IOException {
Stage stage = (Stage) button.getScene().getWindow();
Parent root = FXMLLoader.load(getClass().getResource(resource));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
@FXML
public void viewAirline() throws IOException {
loadNewWindow("/main/resources/Airline Page.fxml", viewAirline);
//some code here, involves Object selected
String name = selected.name;
airlineName.setText(name); //This is line 67
airlineName.setFill(Color.RED);
System.out.println(airlineName.getText());
}
错误信息:
Caused by: java.lang.reflect.InvocationTargetException
...
javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
... 45 more
Caused by: java.lang.NullPointerException
at main.GUI.Controller.viewAirline(Controller.java:67)
viewAirline 方法不是在 java 中使用,而是在 FXML 中使用:
<Button fx:id="viewAirline" mnemonicParsing="false" onAction="#viewAirline" text="View Airline" GridPane.columnIndex="1" />
只要按下按钮(类似名称)viewAirline,它就会被激活。
此 FXML 代码是 viewAirline() 方法(“/main/resources/Airline Page.fxml”)中引用的不同 FXML 代码。 Text 元素在Airline Page.fxml 中被引用。所有 FXML 文件都使用相同的控制器。
【问题讨论】:
-
这是因为
airlineName和airlineText不匹配吗? -
我的错误。没有不匹配,我这里写错了代码。在实际代码中是
airlineName。 -
您确定您使用的是正确的控制器实例吗?顺便说一句:如果您使用
loadNewWindow方法static会更好,因为与您的控制器实例没有真正的关系(除非 fxml 也使用包含类作为它的控制器类)。 -
我支持@fabian:我想到 FXML 注入不在定义它的 FXML 文件中引用的控制器中。
-
@fabian:我不能让它成为静态的。来自
FXMLLoader.load(getClass()...的getClass()不能从静态上下文中引用。
标签: java user-interface javafx fxml