JAVA中GETCLASSLOADER().GETRESOURCE()和GETRESOURCE()的区别

 

在Java中需要加载一个文件时,使用getResource()方法进行加载,会报错

[Caused by: java.lang.NullPointerException: Location is required.

这是对.getClass().getClassLoader().getResource()和.getClass().getResource()的理解不够深入的原因。

经过查询相关资料后终于明白,区别主要如下:

  1. .getClass().getResource(fileName) :表示只会在当前调用类所在的同一路径下查找该fileName文件;

  2. .getClass().getClassLoader().getResource(fileName):表示只会在根目录下(/)查找该文件;

  3. fileName如果是前面加“/”,如"/fileName",则表示绝对路径,取/目录下的该文件;
    如果是前面没有加“/”,如"fileName",则表示相对路径,取与调用类同一路径下的该文件。

  4. 如果路径中包含包名 ,getClass().getResource("com/xxx/1.xml");
    包名的层级使用"/"隔开(正斜杠),而非“.”(半角句号)。

举例:
包com.aaa下有调用类A,需要引用配置文件1.xml:

1. 配置文件在包com.aaa下

getClass().getResource("1.fxml") ——成功
getClass().getResource("/1.fxml")——失败
getClass().getClassLoader().getResource("1.fxml")——失败
getClass().getClassLoader().getResource("/1.fxml")——失败

第2条失败,原因是使用了绝对路径,路径不正确(/目录下没有该文件)。应为:

getClass().getResource("/com/aaa/1.fxml")
(com前有"/",表示绝对目录,从/目录开始)

第3条失败是因为相对路径不正确,应为:

getClass().getClassLoader().getResource("com/aaa/1.fxml")
(此处注意com前面没有“/”,因为getClassLoader()已经表示/目录)

第4条失败是绝对路径不正确,因为当前已在/目录下,再使用/1.fxml就出错。可以改为如下:

getClass().getClassLoader().getResource("./1.fxml")

2.配置文件在根目录下

getClass().getResource("1.fxml") ——失败
getClass().getResource("/1.fxml")——成功
getClass().getClassLoader().getResource("1.fxml")——成功
getClass().getClassLoader().getResource("/1.fxml")——失败

第1条是使用相对路径,路径不正确所以失败,应为:

getClass().getResource("../../1.fxml")

第4条失败是因为当前路径已经为/。可以使用:

getClass().getClassLoader().getResource("./1.fxml")

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
160个项目开发实例,聊天项目,小游戏适和新手学习(项目采用GBK编码)。 import java.util.*; import java.io.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; class Gobang extends JFrame implements Runnable, ActionListener { final static int Player=1; final static int AI =-1; ClassLoader cl = this.getClass().getClassLoader(); Toolkit tk = Toolkit.getDefaultToolkit(); int length=14, game_state, winner, check, step; int grid[][] = new int[length][length]; int locX, locY /* 囱竚 */, count /* 硈囱计 */, x, y /* 既竚 */, displace_x=0, displace_y=0 /* 簿秖 */, direction; ArrayList steps = new ArrayList(); /* 癘魁囱˙ */ JPopupMenu control_menu = new JPopupMenu(); /* 龄匡虫 */ JMenuItem[] command = new JMenuItem[4]; String[] command_str={"囱", "郎", "弄郎", "秨"}; int[][] dir = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} }; boolean[] dir2 = new boolean[8]; boolean turn; String message; final JDialog dialog = new JDialog(this, "叫匡", true); Font font=new Font("new_font", Font.BOLD, 20); Grid grids[][] = new Grid[length][length]; Image white= tk.getImage(cl.getResource("res/white.png")); Image black= tk.getImage(cl.getResource("res/black.png")); Image title= tk.getImage(cl.getResource("res/title.png")); Image temp; JPanel boardPanel, bigpanel; JRadioButton[] choice = new JRadioButton[2]; final static int Start =0; final static int Select =1; final static int Playing =2; final static int End =3; final static int nil=-1; /* 礚よ */ final static int oblique_1 =0; /* オ */ final static int oblique_2 =1; /* オ */ final static int horizontal =2; /* 绢 */ final static int vertical=3; /*  */ Gobang() { super("き囱"); boardPanel = new JPanel(); boardPanel.setLayout(new GridLayout(length, length, 0, 0)); boardPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); for(int i=0; i<length; i++) for(int j=0; j<length; j++) {

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值