我制作了一个java应用程序,并将所有类打包成jar文件。当我从netbeans运行项目时,我的应用程序可以成功运行。但是当我将我的.jar文件放到其他地方并从那里运行时,我无法获取应用程序使用的图标。在代码中,我从项目文件夹中的images目录中获取我的图标。
现在,我想知道如何向最终用户展示这些图像文件(就像我们展示.jar文件一样)。提前感谢您的回答。
似乎这里有两个问题:
如何让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());
/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg true
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);
/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg true
file:/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg
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)创建图标