Java FXMLLoader.load(url)赢得';别上当
我正在处理javaFX应用程序,我想在应用程序启动时崩溃时运行一些代码,因此基本上是在围绕Java FXMLLoader.load(url)赢得';别上当,java,exception,javafx-8,fxmlloader,Java,Exception,Javafx 8,Fxmlloader,我正在处理javaFX应用程序,我想在应用程序启动时崩溃时运行一些代码,因此基本上是在围绕FXMLLoader.load()methode的catch子句中的start()methode中,但由于某些原因,它不会捕获它抛出的IOException(我在getResource()中放了一个错误的url)methode,以便引发异常) 但是如果我用基类Exception交换IOException,那么在IOException之前是否有一个更深层次的嵌套Exception抛出,我不知道?(控制台显示一
FXMLLoader.load()
methode的catch子句中的start()
methode中,但由于某些原因,它不会捕获它抛出的IOException
(我在getResource()中放了一个错误的url)
methode,以便引发异常)
但是如果我用基类Exception
交换IOException
,那么在IOException
之前是否有一个更深层次的嵌套Exception
抛出,我不知道?(控制台显示一个java.lang.reflect.InvocationTargetException
)
更新:
我尝试将getResource()
和FXMLoader.load()
函数分开,并用一条消息将它们分开,以查看引发异常的位置。
结论:异常是由fxmloader.load()
方法100%抛出的
public void start(Stage primaryStage) {
stage = primaryStage;
try {
URL url = getClass().getClassLoader().getResource("view/Lgin.fxml");
System.out.println("URL loaded");
Parent root = FXMLLoader.load(url);
System.out.println("FXML loaded");
stage.setScene(new Scene(null));
stage.getIcons().add(new Image("resources/icons/Login.png"));
stage.setTitle("main");
stage.setResizable(false);
stage.centerOnScreen();
stage.show();
} catch(IOException e) {
//LOGGER.log(Level.SEVERE, e.toString(), e);
//System.exit(0);
System.out.println("catch reached");
}
}
堆栈跟踪:
URL loaded
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at launcher.DigitalCourt.start(DigitalCourt.java:42)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at 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.lambda$null$148(WinApplication.java:191)
... 1 more
Exception running application launcher.DigitalCourt
Java Result: 1
引发的异常是NullPointerException
,它不是IOException
的子类,这就是未捕获异常的原因
NullPointerException
是一种RuntimeException
因此,如果要捕获NullPointerException
可以捕获NullPointerException
或RuntimeException
使用exception
时会捕获异常原因,因为RuntimeException
扩展了exception
要捕获此特定异常,可以执行以下操作之一
catch(IOException|NullPointerException e) {
//LOGGER.log(Level.SEVERE, e.toString(), e);
//System.exit(0);
System.out.println("catch reached");
}
或
另外,java.lang.reflect.InvocationTargetException
不会从代码中抛出,而是从调用public void start(Stage primaryStage)的JavaFX中抛出
由于存在异常,JavaFX将原始异常包装在java.lang.reflect.InvocationTargetException
中,因此引发的异常是NullPointerException
,它不是IOException
的子类,这就是未捕获异常的原因
NullPointerException
是一种RuntimeException
因此,如果要捕获NullPointerException
可以捕获NullPointerException
或RuntimeException
使用exception
时会捕获异常原因,因为RuntimeException
扩展了exception
要捕获此特定异常,可以执行以下操作之一
catch(IOException|NullPointerException e) {
//LOGGER.log(Level.SEVERE, e.toString(), e);
//System.exit(0);
System.out.println("catch reached");
}
或
另外,java.lang.reflect.InvocationTargetException
不是从代码中抛出的,而是从调用您的public void start(Stage primaryStage)
的JavaFX中抛出的,因为存在异常JavaFX将原始异常包装在java.lang.reflect.InvocationTargetException