如何将图像打包到jar文件中

14

我制作了一个java应用程序,并将所有类打包成jar文件。当我从netbeans运行项目时,我的应用程序可以成功运行。但是当我将我的.jar文件放到其他地方并从那里运行时,我无法获取应用程序使用的图标。在代码中,我从项目文件夹中的images目录中获取我的图标。

现在,我想知道如何向最终用户展示这些图像文件(就像我们展示.jar文件一样)。提前感谢您的回答。


看一下我在Swing组件中的答案添加图像和图标到JAR文件 - Abdelsalam Shahlol
2个回答

29

似乎这里有两个问题:

  1. 如何让NetBeans在构建项目时将图像文件包含在生成的jar中?

  2. 如何从jar中访问图像文件?

此答案适用于NetBeans 6.8,并解决了这两个子问题。

假设您有一个基于Ant的Java应用程序项目。

下面是项目的“文件”视图:

JP
+ images
  + test.jpg
+ nbproject
+ src
  + jp
    + Main.java
+ test
+ build.xml
+ manifest.mf

在你的Main.java文件中,你有以下代码:

public static void main(String[] args) throws IOException {
    // find the file in the file system.. probably not a good idea
    File f = new File("images/test.jpg");
    System.out.println(f.getCanonicalPath()+" "+f.exists());

当您从NB内部运行此项目时,您将获得以下输出:
/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg true

当你运行打包成jar的代码时,你会得到类似于这样的东西:
bash-3.2$ pwd
/export/home/vkraemer/nbhg/web-main
bash-3.2$ java -jar /export/home/vkraemer/NetBeansProjects/JavaApplication2/dist/JavaApplication2.jar
/export/home/vkraemer/nbhg/web-main/images/test.txt false

当执行jar文件时,如果想要获得更好的效果,需要进行以下操作:

将images目录添加为项目的源根目录

右键单击项目并选择“属性”项,会弹出一个对话框。

在对话框左侧的列表中选择“Sources”。这将改变对话框右侧面板的内容。

点击“Source Package Folders”表格旁边出现的“Add Folder…”按钮。将会出现一个FileChooser。

使用此FileChooser选择images文件夹,然后点击“OK”按钮。images文件夹的条目将被添加到表格中。

使用项目属性对话框上的“OK”按钮接受更改并关闭对话框。

更改您的代码以使用Class.getResource()

public static void main(String[] args) throws IOException {
    // find the file in the file system.. probably not a good idea
    File f = new File("images/test.jpg");
    System.out.println(f.getCanonicalPath()+" "+f.exists());
    URL url = Main.class.getResource("/test.jpg");
    System.out.println(url);

当你在IDE中运行项目时,你应该看到类似这样的东西:
/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg true
file:/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg

当您运行打包到jar中的代码时,您将会得到类似于这样的内容:
bash-3.2$ pwd
/export/home/vkraemer/nbhg/web-main
bash-3.2$ java -jar /export/home/vkraemer/NetBeansProjects/JavaApplication2/dist/JavaApplication2.jar
/export/home/vkraemer/nbhg/web-main/images/test.jpg false
jar:file:/export/home/vkraemer/NetBeansProjects/JavaApplication2/dist/JavaApplication2.jar!/test.jpg

在获取test.jpg文件的URL后,您可以使用ImageIcon(URL)创建图标


1
非常感谢。我遇到了一个类似的问题,即无法从.exe Java应用程序包中引用图像资源。不过,有了你提供的解决方案,现在一切都能完美运行了。 - Gabriel

3
对于NetBeans 6.9中的Maven项目,请将您的文件放入项目的“其他资源”文件夹下的“Resources”文件夹中。
并且务必不要忘记前导“/”。

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