まずは。 jarファイル内の画像にアクセスする方法については、すでにさまざまなトピックが存在しています。 秒。私は多くのオプションを試してみて、どれもうまくいきませんでした。もちろん私はどこかで間違いをしていることを知っています。私が間違っていることを理解するのを助けることができますか?ジャーの中の画像にアクセスする
私は名前が 'j'のプロトタイププロジェクトを持っています。これにはただ1つのJavaクラス - クライアントが含まれています。 イメージが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'を '/'に置き換えることで解決しました。 Marko Topolnikに多くの感謝!!!!
この文脈では 'File.separator'を使うのは間違いです。これをWindowsで実行すると、失敗します。 URLはプラットフォーム固有のセパレータを使用せず、バックスラッシュは間違ったセパレータです。 –
Javaプロジェクトの構造は実際には面白くありません。提供する必要のある構造は、あなたのjarファイル( 'jar tvf thejarfile.jar')です。私は実際に使用しているので、 'PNG'を書いたときに私は間違いを犯しました、それはまた問題でしたが、主な問題は 'File.separator'にありました。(確かにできません) –