Class.getResource("xxx.css")得到值为null

一、问题背景

已知存在目录结构

在Login.java存在以下代码,运行Login.java时,提示空指针错误。经排查,发现是Login.class.getResource("Login.css")这段代码的值为null导致

scene.getStylesheets().add(Login.class.getResource("Login.css").toExternalForm());

二、解决过程

百度了 下,查看到谋篇博文java中Class.getResource用法和自己老是有事没事报NullPointer错误的原因分析,文中提到,getResouce()是以class为出发点,需找到.java编译成.class所在的目录为根目录,再结合相对路径,来定位资料文件

至于getResouce()方法的参数,你以class为出发点,再结合相对路径的概念,就可以准确地定位资源文件了,至于它的根目录嘛,你用不同的IDE build出来是不同的位置下的,不过都是以顶层package作为根目录,比如在Web应用中,有一个WEB-INF的目录,WEB-INF目录里面除了web.xml文件外,还有一个classes目录,没错了,它就是你这个WEB应用的package的顶层目录,也是所有.class的根目录“/”,假如clasaes目录下面有一个file.txt文件,它的相对路径就是"/file.txt",如果相对路径不是以"/"开头,那么它就是相对于.class的路径。。

解决方法:

把Login.css以及backgroud.jpg移动到resource文件夹下,并修改代码,重新运行Login.java,运行成功,不会报空指针。发现在target相应目录下也生成了Login.css以及backgroud.jpg文件(如果按照上面提到的.class所在文件为根目录,则/Login.css对应目录为classes\Login.css,也就是/Login.css)。

 

 scene.getStylesheets().add(Login.class.getResource("/Login.css").toExternalForm());

 

三、疑惑

1、目前还不是很理解放在Resource文件夹为什么会自动在target生成相应的文件夹,而放在其他文件夹就不会在target生成相应的文件(这里只是先记录下问题解决方法,后续了解到再补充)

2、按照理解,应该是把css文件放在与Login.java同一层目录下,然后配置

scene.getStylesheets().add(Login.class.getResource("Login.css").toExternalForm());也能成功的?

(实战了下,这种情况下,未在target生成相应的css,所以运行也会报空指针)

3、若把Login.css放在与Login.java同一目录下,或者其他非target目录下,按照java中Class.getResource用法和自己老是有事没事报NullPointer错误的原因分析中提到的,配置css文件的绝对路径(比如D:\xx\xx\src\main\java\testUi\Login.css),发现运行时还是报空指针。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值