【发布时间】:2014-06-17 08:11:33
【问题描述】:
是的,我知道这个问题经常被问到,我使用了搜索功能,但无法用这些答案解决我的问题,现在我厌倦了在 google 或其他任何地方搜索。
我的问题:我尝试将 FXML 文件加载到我的 Javacode 中:
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
try {
//Layout laden
Pane pane = FXMLLoader.load(getClass().getResource("layout/main_layout.fxml"));
//Scene erstellen und initialisieren
Scene scene = new Scene(pane);
scene.getStylesheets().add(getClass().getResource("css/main_layout.css").toExternalForm());
primaryStage.setScene(scene);
//Breite und Höhe der Stage setzen
primaryStage.setWidth(1024);
primaryStage.setHeight(768);
primaryStage.setTitle("Untitled - jNotepad");
primaryStage.show();
} catch(IOException e) {
e.printStackTrace();
}
}
}
我的 FXML 文件位于 de.toxiclab.jNotepad.layout 包中,这意味着它与 layout/main_layout.fxml 中的路径相关,因此路径必须正确。
然后它打印出这个丑陋的异常:
javafx.fxml.LoadException: /J:/Eclipse%20Workspace/jNotepad/bin/de/toxiclab/jNotepad/layout/main_layout.fxml:19
在 javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2595) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3120) 在 javafx.fxml.FXMLLoader.load(FXMLLoader.java:3113) 在 de.toxiclab.jNotepad.Main.start(Main.java:32) 在 com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) 在 com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) 在 com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) 在 com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) 在 java.security.AccessController.doPrivileged(Native Method) 在 com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) 在 com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 在 com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 在 com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) 在 com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) 在 java.lang.Thread.run(Thread.java:744) 引起: java.lang.NullPointerException 在 de.toxiclab.jNotepad.NotepadController.getStage(NotepadController.java:199) 在 de.toxiclab.jNotepad.NotepadController.(NotepadController.java:45) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:408) 在 java.lang.Class.newInstance(Class.java:433) 在 sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51) 在 javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:932) 在 javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:976) 在 javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216) 在 javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:738) 在 javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723) 在 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ... 19 更多
但我不明白,为什么会有一个该死的 Nullpointerexception,PATH 是 100% 正确的。
【问题讨论】:
-
NotepadController 第 199 行是什么?
-
return ((Stage)this.textPane.getScene().getWindow());
-
如果我不得不猜测,它试图在场景完全显示之前抓取窗口,这会导致您的空指针异常,您可能需要在舞台中添加一个
WindowEvent.WINDOW_SHOWN处理程序那一点,然后在显示窗口后尝试获取窗口 -
我该怎么做呢?只需修改getStage方法即可?
-
我会回答的,一秒钟