第一。我知道关于如何访问jar文件中的图像已经存在各种主题。第二。我尝试了很多选择,但没有一个没有用。我当然知道在某个地方我犯了一个错误。您能帮助我了解我在做什么错吗?
因此,我有一个名为“ j”的原型项目,它仅包含一个Java类- 客户端。客户端尝试访问图像good.png。将所有文件打包到可执行jar文件后,客户端将无法访问文件。我在月食中工作,并使用蚂蚁。
j/ -src/ --com/ ---pupcom/ ----Client.java -images/ --good.png -build.xml -.classpath -.project
com.pupcom.Client包含
package com.pupcom; //imports; public class Client { public static void main(String [] a) { new Client(); } public Client() { URL imageURL = getClass().getClassLoader().getResource("images"+File.separator+"good.png"); if(imageURL != null){ Image image = Toolkit.getDefaultToolkit().getImage(imageURL); if(image != null){ System.out.println("Complete!"); }else{ System.out.println("image == null"); } }else{ System.out.println("imageURL == null"); } } }
build.xml:
<?xml version="1.0" encoding="UTF-8"?> <project name="j" basedir="."> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="main-class" value="com.pupcom.Client"/> <property name="jar.name" value="j.jar"/> <target name="clean"> <delete dir="${build.dir}"/> <delete file="${jar.name}"/> </target> <target name="compile" depends="clean"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.dir}/images"/> <copy todir="${build.dir}/images"> <fileset dir="images" /> </copy> <javac srcdir="${src.dir}" destdir="${build.dir}" /> </target> <target name="run" depends="jar"> <java jar="${jar.name}" fork="true"/> </target> <target name="jar" depends="compile"> <jar destfile="${jar.name}"> <fileset dir="${build.dir}" /> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target> </project>
我还使用了以下几行:
URL imageURL = getClass().getClassLoader().getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = getClass().getClassLoader().getResource("good.PNG"); URL imageURL = getClass().getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = getClass().getResource("good.PNG"); URL imageURL = Client.class.getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = Client.class.getResource("good.PNG"); URL imageURL = Client.class.getClassLoader().getResource(File.separator + "images"+File.separator+"good.PNG"); URL imageURL = Client.class.getClassLoader().getResource("good.PNG");
谢谢你的帮助!!!!!!!!!!
多亏了Marko Topolnik,通过将“ File.separator”替换为“ /”解决了该问题。非常感谢Marko Topolnik !!!!
File.separator
getResource()
/
good.PNG