【发布时间】:2016-05-13 04:24:40
【问题描述】:
主类:
Parent root = FXMLLoader.load(getClass().getResource("../layouts/main_window.fxml"));
primaryStage.setTitle("IMGManager");
primaryStage.setScene(new Scene(root));
primaryStage.show();
FXML:
<VBox id="navigation" stylesheets="@../../css/center_panels.css"
xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="controllers.NavigationController">
<!-- ... -->
<!-- List -->
<AnchorPane prefHeight="1500.0" prefWidth="492.0">
<children>
<ListView id="directories-list"
fx:id="navigationList"
prefHeight="500.0" ... />
</children>
</AnchorPane>
</VBox>
控制器:导航控制器
public class NavigationController implements Initializable {
@FXML private ListView<String> navigationList;
// ...
@Override
public void initialize(URL location, ResourceBundle resources) {
// Get Home Directory
FileSystemView fsw = ...
// Updates the information displayed in the Navigation panel.
if (navigationList != null)
{
updateNavigationDisplay();
}
}
// ...
}
你好,我遇到的问题是:
1. )
每当我尝试链接 JavaFX 组件和 Controller 变量时,Scene Builder 和 Intellij 都不会在 fx:id(s) 和我的 Controller 中的变量之间建立“连接”。
我总是在我的控制器初始化中得到 nullPointerError,但我发现了一个(麻烦的)解决方法:
if (navigationList != null)。我注意到我的初始化方法触发了两次。一次使用空组件,第二次(魔术)检测组件。因此,通过添加
if (navigationList != null),我在第一次初始化时不会出现任何错误,而在第二次初始化时我会做一些很酷的事情。2。 )
我无法访问位于另一个 FXML 文件中的组件,然后是与控制器链接的那个:nullPointer。
例如:
Controller1 FXML1.fxml
Controller1 -- 试图访问 --> FXML2.fxml 中的组件(失败得很惨)
编辑:
通过“尝试访问另一个 fxml 文件中的组件”,我的意思是通过鼠标单击或类似的方式 -> 当然不是在初始化期间,因为某些 fxml 文件尚未加载。
我搜索了很多答案并为此浪费了几个小时。大多数时候,通过纠正一些小的拼写错误、缺少@FXML 标签或添加 Intializable 接口的正确实现等来解决类似的情况。
就我而言,我真的不明白。希望这只是拼写错误或一些小错误。
感谢您的回答
【问题讨论】:
标签: java javafx nullpointerexception scenebuilder jcomponent