0
点赞
收藏
分享

微信扫一扫

JavaFx出现错误Caused by: java.lang.NullPointerException: Location is required的解决方法

J简文 2022-02-28 阅读 68

问题截图:

“C:\Program Files\Java\jdk1.8.0_131\bin\java.exe” “-javaagent:I:\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar=53553:I:\IntelliJ IDEA 2018.2.5\bin” -Dfile.encoding=UTF-8 -classpath “C:\Program Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;Q:\JavaProject\JFXTest\target\classes;Q:\maven\maven_jar\com\jfoenix\jfoenix\8.0.8\jfoenix-8.0.8.jar” sample.Main
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 F X H e l p e r . m a i n ( L a u n c h e r H e l p e r . j a v a : 767 ) C a u s e d b y : j a v a . l a n g . R u n t i m e E x c e p t i o n : E x c e p t i o n i n A p p l i c a t i o n s t a r t m e t h o d a t c o m . s u n . j a v a f x . a p p l i c a t i o n . L a u n c h e r I m p l . l a u n c h A p p l i c a t i o n 1 ( L a u n c h e r I m p l . j a v a : 917 ) a t c o m . s u n . j a v a f x . a p p l i c a t i o n . L a u n c h e r I m p l . l a m b d a 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 FXHelper.main(LauncherHelper.java:767)Causedby:java.lang.RuntimeException:ExceptioninApplicationstartmethodatcom.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)atcom.sun.javafx.application.LauncherImpl.lambdalaunchApplication 155 ( L a u n c h e r I m p l . j a v a : 182 ) a t j a v a . l a n g . T h r e a d . r u n ( T h r e a d . j a v a : 748 ) C a u s e d b y : j a v a . l a n g . N u l l P o i n t e r E x c e p t i o n : L o c a t i o n i s r e q u i r e d . a t j a v a f x . f x m l . F X M L L o a d e r . l o a d I m p l ( F X M L L o a d e r . j a v a : 3207 ) a t j a v a f x . f x m l . F X M L L o a d e r . l o a d I m p l ( F X M L L o a d e r . j a v a : 3175 ) a t j a v a f x . f x m l . F X M L L o a d e r . l o a d I m p l ( F X M L L o a d e r . j a v a : 3148 ) a t j a v a f x . f x m l . F X M L L o a d e r . l o a d I m p l ( F X M L L o a d e r . j a v a : 3124 ) a t j a v a f x . f x m l . F X M L L o a d e r . l o a d I m p l ( F X M L L o a d e r . j a v a : 3104 ) a t j a v a f x . f x m l . F X M L L o a d e r . l o a d ( F X M L L o a d e r . j a v a : 3097 ) a t s a m p l e . M a i n . s t a r t ( M a i n . j a v a : 13 ) a t c o m . s u n . j a v a f x . a p p l i c a t i o n . L a u n c h e r I m p l . l a m b d a 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 sample.Main.start(Main.java:13) at com.sun.javafx.application.LauncherImpl.lambda 155(LauncherImpl.java:182)atjava.lang.Thread.run(Thread.java:748)Causedby:java.lang.NullPointerException:Locationisrequired.atjavafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)atjavafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)atjavafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)atjavafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)atjavafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)atjavafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)atsample.Main.start(Main.java:13)atcom.sun.javafx.application.LauncherImpl.lambdalaunchApplication1 162 ( L a u n c h e r I m p l . j a v a : 863 ) a t c o m . s u n . j a v a f x . a p p l i c a t i o n . P l a t f o r m I m p l . l a m b d a 162(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda 162(LauncherImpl.java:863)atcom.sun.javafx.application.PlatformImpl.lambdarunAndWait 175 ( P l a t f o r m I m p l . j a v a : 326 ) a t c o m . s u n . j a v a f x . a p p l i c a t i o n . P l a t f o r m I m p l . l a m b d a 175(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda 175(PlatformImpl.java:326)atcom.sun.javafx.application.PlatformImpl.lambdanull 173 ( P l a t f o r m I m p l . j a v a : 295 ) a t j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( N a t i v e M e t h o d ) a t c o m . s u n . j a v a f x . a p p l i c a t i o n . P l a t f o r m I m p l . l a m b d a 173(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda 173(PlatformImpl.java:295)atjava.security.AccessController.doPrivileged(NativeMethod)atcom.sun.javafx.application.PlatformImpl.lambdarunLater 174 ( P l a t f o r m I m p l . j a v a : 294 ) a t c o m . s u n . g l a s s . u i . I n v o k e L a t e r D i s p a t c h e r 174(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher 174(PlatformImpl.java:294)atcom.sun.glass.ui.InvokeLaterDispatcherFuture.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 sample.Main

Process finished with exit code 1

问题原因
问题出现的原因是因为空指针,也就是getClass().getResource(“sample.fxml”)这个方法的结果为空

我们可以测试一下,把代码稍微分为两段

如图,如果为空,则输出hello,停止程序
测试结果如下图

分析
上面我们知道了,没有找到该文件,那么,我们把那个fxml布局放在该目录下就可以解决空指针的问题了。
我们先看看改路径是在哪里(使用getResource(""))

结果为

然后我查一下了Maven,因为我们使用了Maven,它会把java文件编译成的class文件默认放在一个名为target的文件夹中.其他的文件就会忽略,不放在target文件夹中

解决方法
解决办法很简单,我们只需要在pom.xml设置,将布局fxml文件放在target文件夹中即可

	<resource>
		<!-- 这里是放在 src/main/java-->
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.properties</include>
			<include>**/*.fxml</include>
			<include>**/fxml/*.fxml</include>
			<!-- 如果想要弄个包名专门放fxml文件,像上一行这样添加设置 -->
			<!-- 之后,使用getResource("fxml/xx.fxml")这样子 -->
		</includes>
		<filtering>false</filtering>
	</resource>
</resources>
举报

相关推荐

0 条评论