私はこの質問がすでに尋ねられて答えられたと思いました!
getClass().getResource()
クラスパスルートを基準にして検索しながら、.classファイルを
基準にして検索しgetClass().getClassLoader().getResource()
ます。
ここにSSCCEがあるとしたら、なぜそうならないのかわかりません
1).jarにディレクトリ構成を表示し、...
2)パッケージを考慮に入れる
Q:Class.getResource()とClassLoader.getResource()の違いは何ですか?(そしてそれが引用しているリンク)?
================================================== =======================
何が明確でないのかはまだわかりませんが、この例が役立つ場合があります。
/*
SAMPLE OUTPUT:
ClassLoader.getResource(/subdir/readme.txt): NULL
Class.getResource(/subdir/readme.txt): SUCCESS
ClassLoader.getResource(subdir/readme.txt): SUCCESS
Class.getResource(subdir/readme.txt): NULL
*/
package com.so.resourcetest;
import java.net.URL;
public class ResourceTest {
public static void main(String[] args) {
ResourceTest app = new ResourceTest ();
}
public ResourceTest () {
doClassLoaderGetResource ("/subdir/readme.txt");
doClassGetResource ("/subdir/readme.txt");
doClassLoaderGetResource ("subdir/readme.txt");
doClassGetResource ("subdir/readme.txt");
}
private void doClassLoaderGetResource (String sPath) {
URL url = getClass().getClassLoader().getResource(sPath);
if (url == null)
System.out.println("ClassLoader.getResource(" + sPath + "): NULL");
else
System.out.println("ClassLoader.getResource(" + sPath + "): SUCCESS");
}
private void doClassGetResource (String sPath) {
URL url = getClass().getResource(sPath);
if (url == null)
System.out.println("Class.getResource(" + sPath + "): NULL");
else
System.out.println("Class.getResource(" + sPath + "): SUCCESS");
}
}
対応するディレクトリツリーは次のとおりです。たまたまEclipseプロジェクトですが、ディレクトリは、Eclipse、Netbeans ...、または.jarファイルのいずれであっても同じです。
C:.
├───.settings
├───bin
│ ├───com
│ │ └───so
│ │ └───resourcetest
│ └───subdir
└───src
├───com
│ └───so
│ └───resourcetest
└───subdir
開かれているファイルは「subdir/readme.txt」です
補遺11/9/12:
やあ -
コードをgithubから逐語的にコピーし、再コンパイルして再実行しました。
ClassLoader.getResource(/subdir/readme.txt): NULL
Class.getResource(/subdir/readme.txt): SUCCESS
ClassLoader.getResource(subdir/readme.txt): SUCCESS
Class.getResource(subdir/readme.txt): NULL
それがあなたが得ている出力ではない場合...私は困惑しています。
それが価値があるものは何でも、私は実行しています:
Eclipse Indigo(問題ではないはずです)
IDE内での実行(IDEの内部または外部のファイルシステムまたは.jarであるかどうかは関係ありません)
私のJREは1.6です(どちらかといえば、これはおそらく大きな問題です)
申し訳ありませんが、私が簡単な問題だと思っていた問題を解決できませんでした:(
補遺11/21/12(アンドレアス):
この質問に関する最近の活動はなかったので、私たちが見つけたものを要約したいと思います。
- 私たちの一般的な理解から、上記の質問に対する答えは次のとおりです。「いいえ、
Class.getResource("/path/image.png")
有効なURLを返すことはできませんが、 ClassLoader.getResource("path/image.png")
nullを返すことはできません」:
- ClassLoader.getResource()とClass.getResource()の違いは完全に明らかです。
- サンプル出力は、「SUCCESS」と「null」の両方で一致します
- サンプル出力は、私たちが期待するものと一致します
- 結論:私たちが何かを監督したか、または別の何かが原因で、リンクされた質問に記載されている「解決策」が機能しました。現在、どちらかを証明することはできないと思います。