2012-05-06 5 views
2

まずは。 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に多くの感謝!!!!

+3

この文脈では 'File.separator'を使うのは間違いです。これをWindowsで実行すると、失敗します。 URLはプラットフォーム固有のセパレータを使用せず、バックスラッシュは間違ったセパレータです。 –

+1

Javaプロジェクトの構造は実際には面白くありません。提供する必要のある構造は、あなたのjarファイル( 'jar tvf thejarfile.jar')です。私は実際に使用しているので、 'PNG'を書いたときに私は間違いを犯しました、それはまた問題でしたが、主な問題は 'File.separator'にありました。(確かにできません) –

答えて

5
  1. getResource()File.separatorを使用しないでください - それは常には(URLのHREFと考える)/をとります。
  2. パスの先頭に/を追加して、クラスローダーがクラスのパッケージからの相対パスではなく、クラスパスのルートから確実に検索するようにします。
  3. good.PNGが正しいことを確認してください。 Windowsのファイルシステムでは問題ありませんが、getResource()では大文字と小文字が区別されます。
+0

'png'ありがとう! – Hlib

関連する問題