问题截图:
“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>