这里似乎有两个问题:
如何让 NetBeans 在构建项目时生成的 jar 中包含图像文件?
如何从 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 时得到更好的结果,您需要执行以下操作:
添加图像目录作为项目的源根目录.
右键单击该项目并选择“属性”项。将出现一个对话框。
在对话框左侧的列表中选择“来源”。这将更改对话框右侧面板的内容。
按“源包文件夹”表旁边出现的“添加文件夹...”按钮。将出现一个文件选择器。
使用此选择器选择图像文件夹,然后按 OK 按钮。图像文件夹的条目将添加到表中。
使用“项目属性”对话框上的“确定”按钮接受更改并关闭该对话框。
更改您要使用的代码类.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 后,您可以使用图像图标(URL)创建图标