使用 ClassLoader 检索资源的路径

Path for retrieving resources with ClassLoader

基本上,我想在 JAR 文件中包含我的主要 JFrame 图标,因此不需要从外部位置加载它。

为此,我搜索了Java的资源系统。 我用 Eclipse 做了什么:

  1. 我创建了一个名为 "res":

    的新文件夹

  2. 我已经使用 Windows' 资源管理器复制了其中的文件:

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

  4. 我写过这段代码:

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

但是 urlnull。 我做错了什么?

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

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

如前所述,您似乎已将 res 添加为源文件夹,因此它是一个根目录,而不是名称,例如 src.

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

Class 加载程序使用绝对(区分大小写)路径,没有明确的前导斜杠 /....

绝对路径必须有前导斜杠的相对路径:

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 的使用让人想起 MS Visual Studio ;)。