【发布时间】:2012-09-10 05:11:25
【问题描述】:
所以我的问题很简单。当他们是String 而不是Label 时,我可以在单独的类中访问类成员,但是当他们是 @987654324 时,我似乎无法访问@。使用 JDK 7u6(带 JavaFX 2.2)。
简单的例子。第一个有效,第二个无效。 foo.label 可以在第一个示例中分配,但我在第二个示例中得到一个 NullPointer。谁能解释为什么foo.label 在下面的第二个示例中为空?
更新:我从原始问题中删除了 @FXML 注释,因为我认为它们对于我遇到的问题不是必需的。另外,请参阅我对answer by @jewelsea 的评论...最后,为了完整起见,我添加了我的 FXML 文件(在 Q 的底部)。
这行得通:
// Example 1:
public class SampleController implements Initializable {
Foo foo = new Foo();
public void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
foo.label = "Hello World!";
System.out.println(foo.label);
}
@Override public void initialize(URL url, ResourceBundle rb) {
}
}
// Example 1 -- Foo.java:
public class Foo {
public String label;
}
而这行不通:
// Example 2:
public class SampleController implements Initializable {
Foo foo = new Foo();
public void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
foo.label.setText("Hello World!"); // gives NullPointer exception !!
}
@Override public void initialize(URL url, ResourceBundle rb) {
}
}
// Example 2 -- Foo.java:
import javafx.scene.control.Label;
public class Foo {
public Label label;
}
这是我的 FXML 文件,用于上述任一示例:
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="javafxapplication4.SampleController">
<children>
<Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
<Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" text="hey!" />
</children>
</AnchorPane>
【问题讨论】: