0

私は、Eclipse や NetBeans などの開発環境で作業していません。私は Windows ターミナルから作業しています。私のルート フォルダーは、src、res、bin を含む Project です。

res には、src フォルダーの Java クラスで使用したい -png ファイルが含まれています。プロジェクト内のファイルとフォルダーの構造を手動で並べ替えても、コードの動作には影響しないため、混乱しています。クラスが含まれるパッケージをコード内で宣言する必要があります。Image1.png がパッケージ res にあることを (コードで) 宣言できません。私のクラスはどのようにしてこの画像を見つけますか?

アクセスしたいクラスと同じパッケージに画像を入れてみましたが、単に試してみgetResource("Image1.png")ましたが、NullPointerException.

誰もこの問題を抱えていないようで、どこにも答えが見つかりません。

私のプロジェクトのレイアウト:

Project
  bin
    samplecode
      SampleCodeClass1.class
      SampleCodeClass2.class
  res
    Image1.png
  src
    samplecode
      SampleCodeClass1.java
      SampleCodeClass2.java

プロジェクトディレクトリからターミナルを開いて次のように入力すると、

java -cp bin;res samplecode.SampleCodeClass1

私は得るat javax.swing.ImageIcon.<init>(Unknown Source)

私のコードでこの行を参照してください:

ImageIcon ii = new ImageIcon(this.getClass().getResource("Image1.png"));

4

2 に答える 2

2

重要なクラスパスは実行時に使用されるものであることを理解する必要があります。Java ソース ファイルのコンパイル時ではありません。構造が

bin
    com
        foo
            MyClass.class
res
    com
        foo
            Image1.png

フォルダーがランタイム クラスパスにある場合は、MyClass.class.getResource("Image1.png")またはを使用できます。AnyClassInAnyPackage.class.getResource("/com/foo/Image1.png")res

java -cp bin;res com.foo.MyClass

フォルダがクラスパスにない場合res、ClassLoader でロードできません。

編集:

画像はデフォルトのパッケージに含まれています。クラスはパッケージのサンプルコードにあります。したがって、それらは同じパッケージにはありません。this.getClass().getResource("Image1.png")したがって、クラスと同じパッケージ内のイメージを検索する を使用することはできません。代わりに、クラスパスのルートからイメージのフル パスを使用する必要があります/this.getClass().getResource("/Image1.png")

于 2013-10-29T19:33:50.993 に答える
0

どの APIgetResourceから参照していますか? java.util.ResourceBundle? ファイルが、クラスパスからの相対パスを参照していることを確認してください。java -classpathこれには、ランタイム クラスパス (例: ) を適切に指定することも必要です。

于 2013-10-29T19:34:00.150 に答える