是的,我知道这个问题经常被问到,我使用搜索功能,但无法用这些答案解决我的问题,现在我很难在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)at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)at at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)at at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191)at at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164)at at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140)at at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3120)at at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3113)at at de.toxiclab.jNotepad.Main.start(Main.java:32)at 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)at com.sun.javafx.application.PlatformImpl $ 6.run(PlatformImpl.java:298) 在 com.sun.glass.ui.InvokeLaterDispatcher $ Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)at 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 at de.toxiclab.jNotepad.NotepadController.getStage(NotepadController.java:199) 在 de.toxiclab.jNotepad.NotepadController。(NotepadController.java:45) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 在java.lang.Class.newInstance(Class.java:433)at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51)at 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%正确。
答案 0 :(得分:2)
所以看到错误之后看似以控制器类为中心' NotePadController'我相信你看到这个NullPointerException
的原因是因为节点还没有附加到场景中。鉴于此,您可能希望尝试将WindowEvent.WINDOW_SHOWN
处理程序附加到方法中的该点。
例如:
你提到第199行是return ((Stage)this.textPane.getScene().getWindow());
Window
变量(比如叫做' window')并说:
(Stage)this.addEventHandler(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
window = ((Stage)this.textPane.getScene().getWindow());
}
});
或类似的东西。
错误的主要内容也可能来自其他地方。祝好运!有时这些类型的问题可能会很棘手。