2015-08-31 136 views
4

基本上,我想将我的主要JFrame的图标包含在JAR文件中,因此不需要从外部位置加载它。使用ClassLoader获取资源的路径

为了达到这个目的,我搜索了关于Java的资源系统。 我已经使用Eclipse完成:

  1. 我已经创建了一个名为新文件夹 “资源”:

  2. 我抄它里面的文件,使用Windows的资源管理器:

  3. 我已将该文件夹作为源文件夹:

  4. 我写了这个代码:

    URL url = ClassLoader.getSystemResource("/res/icona20.ico"); 
    

urlnull。 我做错了什么?

+1

摆脱路径中的'/ res' –

+1

将文件夹添加到构建路径时,它不是路径的一部分,而是将所有内容放在类路径的根目录 –

+2

请参见[这里] (http://stackoverflow.com/a/25636097/2587435) –

回答

3

如前所述你似乎已经加入res作为源文件夹,所以它是根,而不是名称,如src

URL url = ClassLoader.getSystemResource("icona20.ico"); 

类加载器使用一个绝对(区分大小写)的路径,而无需明确的斜线/...

与绝对路径强制性斜线相对路径:

URL url = Xyz.class.getResource("/icona20.ico"); 

,你可能会喜欢.png代替.ico因为后者格式不是在Java SE标准。

(关于常见的做法)的构建工具maven使用一样好标准以下的源文件夹:

/src/main/java/ 
/src/main/resources/ 
/src/test/java/ 
/src/test/resources/ 

你的res使用让人联想到微软的Visual Studio中的)。

+0

是的,我有一个[tag:vb.net]背景。没有像'ClassLoader.getResource(String)'这样的静态方法。 –

+0

你是对的;应该是'getSystemResource'。纠正。我认为安德烈斯也是这样纠正的,他的回答应该是足够的,并且是第一。 –

+0

作为一个方面说明,您不能使用.ico图像来显示'JFrame'的图标;您可以改用.png格式。感谢您指出。 –

3

类加载器将从您添加到类路径的每个源文件夹开始获取资源。因此,URL应该是以下几点:

URL url = ClassLoader.getSystemResource("icona20.ico");