2011-07-18 7 views
1

私はdevの環境を設定していると私は、このコードのビットが私を悩まありますclass.getRessource()(Java)のコンテキストは何ですか?

public static URI getResource(Class<?> cl, String resource) { 
    URL url = cl.getResource(resource); 
    //etc... 
} 

問題は次のとおりです。URLはnullです。問題のressourceは、javaファイルと同じディレクトリにあるファイルです。そして、これは非ヌルのURLを返すことになっています。

この環境は多くの人によって正常にインストールされていますが、私のマシンでは動作しません。

追加情報:

  • getRessource()はCLのクラスローダを使用することになっています。 "[email protected]"
  • このコードは、Windows 7でeclipse Indigoを実行するjUnitテストに含まれています(linuxのさまざまなファイルコンテキストの問題/ windows?)
+1

すぐに役立つように、[SSCCE](http://pscode.org/sscce.html)を投稿してください。 –

答えて

3

クラスローダーは、リソースファイルを.javaファイルではなく.classファイルと同じディレクトリから取得する予定です。 Eclipseプロジェクトの構成によっては、これらのディレクトリが異なる場合があります。

通常、ビルドプロセスはリソースファイルを.classファイルを作成するときに出力ディレクトリにコピーしますが、この場合は多分それはしませんでしたか?

+1

はい、この問題はEclipseの誤設定によって発生します。私は実行ディレクトリ内のファイルをコピーしただけで動作します。 (私はちょっとしたトリックなしでこれをやろうとしているのに4時間を費やしてしまいましたが失敗しました)私はEclipseが嫌いです – BenoitParis

1

cl.getResource(resource)コールは、クラスローダーのクラスパスのresource文字列に対応するリソースをclに配置しようとしています。

これは、resourceがアプリケーションのクラスパスからの相対パスである必要があることを意味します。

メソッド呼び出しがnullを返すという事実は、クラスローダーが要求されたリソースを見つけることができないことを意味します。単体テストを実行する前に、リソースがEclipseまたはBuilderによって適切な場所にコピーされていることを確認する必要があります。

する(Linux/Windowsの中に異なるファイルコンテキストの問題?)

それは多分、リソース名の大文字と小文字の区別の問題です。テストが他の人のために正常に実行されるのであれば疑いがありますが、チェックする価値はあります。

このプロジェクトにはbuild.xmlファイルがありますか? Antを使用してコマンドラインからテストを実行してみてください。

このプロジェクトにはpom.xml個のファイルがありますか? mvn testを使用してコマンドラインからテストを実行してみてください。

+0

Eclipseの作業ディレクトリは本当に問題です...そしてbuild.xmlは時代遅れです/破損しました ありがとうとにかく:D – BenoitParis

0

渡されるクラスは何ですか? J2SEクラスの場合、クラスローダーはブートストラップクラスローダーになり、アプリケーションリソースを特定しません。

0

Class.getResource(String)は、.classと同じパッケージフォルダ内のリソースを検索します。 ClassLoader.getResource(String)は、srcフォルダ内のリソースを検索します。 new File(String)は、srcフォルダの外のリソースを検索します。

関連する問題