在Eclipse中使用JAR导出图像(Java)

3
我一直在做一个需要外部图片显示的小项目。我不太熟悉如何使用Eclipse,这是我第一次尝试导出已完成的项目以便与他人共享。目前,似乎唯一的方法是将特定文件夹分配到我的硬盘上,并且代码中的图像路径指向该文件夹,才能让我的图片显示出来。
我正在寻找一种方法,将图片作为JAR包的一部分或作为同一包的一部分导出,这样当我将此程序发送给其他人时,就不必发送一个单独的归档图片文件夹了。我还想学习如何使我的代码引用该包内的图像,以便它们可以在没有外部文件夹的情况下工作。
我已经阅读过Eclipse中某种包系统的相关内容,但至今仍未成功弄清如何使用它。希望有人能够解释一下!
提前感谢任何愿意提供帮助的人。
6个回答

10

在这个答案中,我觉得以下内容会对你有所帮助:确保将图像/文件放置在与源代码相同的eclipse文件夹(或其子文件夹)中。我使用eclipse创建了一个名为“images_ignored”的文件夹,并将其添加到构建路径中,但当创建可执行JAR文件时,它仍然被拒绝包含在我的JAR文件中。

Eclipse截图显示放置图像的位置


2
我认为这有点违反惯例。只有.java源文件(和其他实际的源代码文件)应该放在src目录中。我认为@danny的回答是最充分的,右键单击所需的文件夹并转到构建路径,“用作源文件夹”。这样,您可以轻松地分离资源(图像、声音、源代码、配置等)。 - Michael Plautz
我特意登录以点赞@MichaelPlautz的评论。请不要因为它偶然可行就在你的.java文件中添加图片。 - wheresmycookie

6
只需将图像文件夹拖入您的Eclipse项目中,然后根据Eclipse版本选择“复制新文件夹”或“复制文件和文件夹”,接着在Eclipse中右键单击图像文件夹,并选择“构建路径” -> “用作源文件夹”。

感谢@danny,这个答案解决了我想做的事情。但是,当你这样做时,它会删除底层文件夹。例如,我有一个名为“img”的文件夹,存储了所有的图片,当我选择“用作源文件夹”时,“img”目录的所有内容都出现在我的“jar”文件的基础/根级别上。为了解决这个问题,我创建了一个名为“lnk”的文件夹,然后在“lnk”文件夹中创建了一个指向我的“img”文件夹的符号链接(在Windows中,可以使用“JUNCTION”完成此操作)。现在,当我将“lnk”“作为源文件夹”添加时,图像就在“jar”中的“img”文件夹中。 - Michael Plautz

2

如果这些文件在一个jar包中,您可能需要将它们作为类路径资源加载。请参见:getClass().getClassLoader().getResourceAsStream(...)。


好的,首先问题是我显然不知道如何使用Eclipse将它们打包到JAR文件中。你能否向我解释一下? - Chiubaka
将它们放在类路径上。因此,找到一个Eclipse源文件夹并将它们放入其中。或者无论它们在哪个文件夹中 - 只需右键单击并单击添加到构建路径。 - Steven

1
使用getResource()加载图片:
ImageIcon qmarkIcon = new ImageIcon(getClass().getResource("images/mark.gif"));

0
如果您正在使用JDK 1.7或JDK 1.8,您可能希望使用NIO.2 API。
for (FileSystemProvider provider : FileSystemProvider.installedProviders()) {
    if ("jar".equals(provider.getScheme()))
        return provider.newFileSystem((new File(Start.class
                .getProtectionDomain().getCodeSource().getLocation().toURI()))
                .toPath(), new HashMap<String, Object>());
}

如果您将此代码输入返回java.nio.file.FileSystem的方法中,您可以调用该方法以获取JAR文件的FileSystem。
要获取访问JAR文件内部文件的路径,您可以使用以下方法,然后可以按照您想要的方式读取文件。
fileSystem.getPath("/images/image.gif")

如果您想在Eclipse中运行此代码,请确保将方法调用放在try/catch IOException块中,并将以下内容分配给FileSystem对象。
new File(Start.class.getProtectionDomain().getCodeSource().getLocation().toURI())
        .toPath().toString();

这将允许您运行程序,无论它是否被压缩成JAR文件。


我建议你开始适应使用NIO.2,因为它是一个非常强大的API。


-1
如果您将文件夹添加到构建路径中,您可以在Eclipse中检索图像,并在导出为JAR文件时检索它们,只需记住不要使用路径引用图像,如img/myImage.gif,而是仅使用myImage.gif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接