首先。我知道已经存在各种关于如何访问 jar 文件内的图像的主题。 第二。我尝试了很多选择,但没有一个不起作用。我当然知道我在某个地方犯了错误。你能帮我理解我做错了什么吗?
所以,我有一个名为“j”的原型(prototype)项目,它只包含一个 java 类 - Client。 客户端尝试访问图片 good.png。我将所有内容打包到可执行 jar 文件后,客户端无法访问文件。 我在 eclipse 中工作,并使用 ant。
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”替换为“/”解决了该问题。 非常感谢马尔科·托波尔尼克!!!!
最佳答案
- 不要在
getResource()
中使用File.separator
- 它总是需要/
(认为将其作为 URL HREF)。 - 在路径前添加
/
前缀,以确保类加载器从类路径的根目录开始搜索,而不是相对于类的包进行搜索。 - 检查
good.PNG
的大小写是否正确。这在 Windows 文件系统上并不重要,但getResource()
区分大小写。
关于java - 访问jar内的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10469533/