5

シンプルなpng画像を含むプログラムをテストしたかったのです。これを行う短いプログラムを書きましたが、パスを正しく取得できないようです。パス名を確認し、再度確認し、再確認し、パス名を 4 倍に確認しましたが、何をしてもこの画像は表示されません。これを実現するために、ImageIcon のドキュメント ( ) で Oracle によって記述された短いクラスを使用しましたcreaetImageIcon()が、役に立たないようです。非常に短いので、プログラム全体を以下に掲載します。

package practiceImages;

import java.awt.BorderLayout;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ImageIconGUITest {

    public static void main(String[] args) {
        ImageIconGUITest gui = new ImageIconGUITest();
        gui.display();
    }

    private ImageIcon createImageIcon(String path, String description) {
        java.net.URL imgURL = getClass().getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL, description);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    private void display() {
        JFrame frame = new JFrame();
        JLabel label = new JLabel(createImageIcon(
                "Users/Evan/javaItems/Sprites_and_Other_Art/green.png", "the color green"));

        frame.add(BorderLayout.CENTER, label);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}
4

6 に答える 6

10

このgetResource(String)メソッドは、アプリケーションのランタイム クラスパスにあるリソースのみを検索します。このイメージはアプリケーション リソース (つまり、アプリケーションの一部として提供される) のように見えるため、実行時のクラスパスに配置する必要があります。

EG ほとんどの IDE には、プロジェクト構造内にリソースを配置できる場所があり、実行時に自動的に含まれます。イメージをそのパスに移動 (またはコピー) します。

次に、正しい を提供することが問題になりますString。プロジェクトが次のように設定されているとします。

  • 置き場
  • ソース
    1. コム
      • 私たちの
        1. アプリケーション.java
    2. 資力
      • green.png

イメージがパスにある間、そうApplication.javaです。package com.our;resources/green.png

から画像にアクセスする場合Application、正しいパスは (drum roll please..) になります。

"/resources/green.png"

ノート

  1. リーディング/が重要です。クラス自体のパッケージへの相対パスを使用するのではなく、「クラスパスのルート」からイメージを探したいことを JRE に伝えます。
  2. 正しい大文字と小文字も重要です。の文字列で"/resources/green.png"は、またはという名前の画像は見つかりません"/resources/Green.png" "/resources/green.PNG"

エクリプス パス

  1. srcディレクトリを右クリックしProperties、メニューの下部で選択します。
    日食のプロパティ
  2. (Eclipse なしで使用する通常の方法を使用して) のディレクトリに移動しLocationます。 プロジェクトの場所を示す Eclipse プロパティ
  3. 次に、親ディレクトリに移動します。
  4. binクラスと (できれば) イメージを含むディレクトリが表示されます。
于 2013-05-19T05:31:18.683 に答える
4

まず、相対パスを指定したため、システムはプログラムを実行した場所に相対的なイメージを探します。

次に、パスにはドライブ仕様または少なくとも先頭の/. セットアップによっては、「C:/Users/Evan/javaItems/Sprites_and_Other_Art/green.png」のようなものが機能するはずです (システムに合わせてドライブの仕様を変更する必要がある場合があります)。

3 番目に、ファイルが指定された場所に存在することを確認してください。System.out.println(new File("C:/Users/Evan/javaItems/Sprites_and_Other_Art/green.png").exists())返されるはずです。そうでないtrue場合、ファイルは間違った場所にあります。

相対パスは基本的に、プログラムの実行に関連するパスの場所を意味します。C:/Program Files/MyAwesomeApplicationしたがって、たとえばからプログラムを実行している場合、 の相対パスはUsers/Evan/javaItems/Sprites_and_Other_Art/green.pngの絶対パスになりC:/Program Files/MyAwesomeApplication/Users/Evan/javaItems/Sprites_and_Other_Art/green.pngます。これは、ルートの場所から問題のファイル/フォルダーへのパスを示します。

これをテストするSystem.out.println(new File("C:/Users/Evan/javaItems/Sprites_and_Other_Art/green.png").getAbsolutePath(‌​))には、 which を使用して完全なパスを取得します。

于 2013-05-19T05:31:13.417 に答える
0

1 つではなく 2 つのスラッシュを使用してください。この問題があり、修正しました。例を示します:

パブリックドライバー (){

    ImageIcon us = new ImageIcon("C:\saeed.gif"); // OS cant find it 
    ImageIcon uk = new ImageIcon("C:\\saeed0.gif"); // OS can 


  JButton button = new JButton ("Click here "  , us ) ;

  button.setRolloverIcon(uk);

  add(button);
}
于 2014-12-24T19:59:51.277 に答える
-2

あなたはする必要がありC:\\Test\\test.pngますC:/Test/test.png

于 2016-04-21T18:04:40.507 に答える