gpt4 book ai didi

java - 在 Java 中加载 ImageIcon

转载 作者:行者123 更新时间:2023-11-29 05:09:08 24 4
gpt4 key购买 nike

我已经在 Google、SE 和 Oracle 的文档中搜索了有关如何执行此操作的信息,但我似乎无法使其工作。

我找到了几篇关于是使用 getResource() 还是 getResourceAsStream() 以及如何格式化文件名的帖子,但没有一个适合我的情况.

我的目录结构如下所示(在资源文件夹中有一些额外的级别):

Root Folder
|
|_____ bin (compiled .class files go here)
|
|_____ src
| |
| |_____ packageA
| | |
| | |_____ packageAa
| | |
| | |_____ images.java
| | |
| | |_____ resources
| | |
| | |_____ icon1.gif
| |
| |_____ packageB
| |
| ... (More packages with sub-packages)
|
|_____ resources (should it go here?)
|
|_____ icon2.gif

在我的实际程序中,我有 107 个 gif 图像,其文件名可以从对象值派生。这些图像目前位于两个资源文件夹中,因为我一直在尝试让一个工作。

我当前的代码尝试这样做:

String imageFileName = getFileName(obj);  // returns a string such as "/resources/cardImages/acespades.gif"
URL imageURL = getClass().getClassLoader().getResource(imageFileName);
ImageIcon icon = new ImageIcon(imageURL);

无论前导反斜杠如何,我都会收到空指针异常。

我应该如何格式化文件名和/或创建一个 URL 对象来获取图像?

注意:我使用带有 Javatar 的 Sublime Text 3 来编译我的代码。文件夹结构(bin 文件夹)由 Javatar 创建。我的“源文件夹”设置为 src,上面显示的“根文件夹”是我的闪存驱动器。

============================================= =====
编辑:

我尝试了 Peter 的建议,结果如下:

URL imageURL = getClass().getResource("resources/cardImages/back1.gif");
System.out.println(imageURL);
ImageIcon icon = new ImageIcon("resources/cardImages/back1.gif");

println 语句打印出 null,但 ImageIcon 确实正确显示图像。我知道这会从 .java 文件旁边的文件夹加载图像。

URL imageURL = getClass().getResource("/resources/cardImages/back1.gif");
System.out.println(imageURL);
ImageIcon icon = new ImageIcon("/resources/cardImages/back1.gif");

println 仍然打印 null,但是现在图像不显示了。我复制并粘贴了整个资源文件夹,以确保它在两个位置都相同。

最佳答案

通过类加载资源时,路径是相对于包路径的,除非您有一个前导斜杠/。

至于你的icon1.gif,使用

URL url = getClass().getResource("resources/icon1.gif");

应该返回正确的 URL。

我建议将 Java 源代码和资源分开。如果资源是源文件夹(其输出文件夹是 bin/JAR 的根目录),请使用:

URL url = getClass().getResource("/icon2.gif");

(注意前导斜杠)。


编辑(问题已更新):
更正了第二个 URL(资源是源文件夹,icon2.gif 位于其根目录)。
我刚刚在 Eclipse 中对其进行了验证,并且获得了两种变体的正确(非空)URL。使用 ImageIcon 中的 URL 也可以给出正确的结果,显示图像。

  • 确保resources 是源文件夹。并非所有的项目文件都位于输出文件夹(通常是 bin),然后是 JAR。
  • 检查您的输出文件夹以确认它包含已编译的类和资源。 Source and output folders (Eclipse)

关于java - 在 Java 中加载 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com