【问题标题】:Path for retrieving resources with ClassLoader使用 ClassLoader 检索资源的路径
【发布时间】:2015-11-25 15:31:21
【问题描述】:

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

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

  1. 我创建了一个名为“res”的新文件夹:

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

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

  4. 我已经写了这段代码:

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

但是urlnull。 我做错了什么?

【问题讨论】:

  • 去掉路径中的/res
  • 将文件夹添加到构建路径时,它不是路径的一部分,而是所有内容都放在类路径的根目录下
  • here
  • @peeskillet 但我希望“src”文件夹仅保存 .java 文件。我希望资源位于单独的文件夹中。我怎么能做到这一点?我是否违反了语言建议?
  • 查看链接中的第二个示例。不,将文件放在不同的文件夹中没有任何问题。如果它在构建路径中,则文件夹中的所有文件(不包括文件夹)都会构建到 jar 中

标签: java eclipse image embedded-resource


【解决方案1】:

如前所述,您似乎已将 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 的使用让人想起MS Visual Studio ;)。

【讨论】:

  • 是的,我有vb.net 背景。没有像ClassLoader.getResource(String) 这样的静态方法。
  • 你是对的;应该是getSystemResource。已更正。我认为安德烈斯也纠正了,然后他的回答应该是足够的。
  • 附带说明,JFrame 的图标不能使用 .ico 图像;您可以改用 .png 格式。感谢您指出。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2011-02-02
    • 2023-03-20
    • 2014-08-04
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多