1

了解しました。JLabelに表示するバッファ画像を作成しました。ファイルの場所を表示するときは、アクセスしたいフォルダの前にsrc /が必要です。そうしないと、エラーが発生してバッファリングされた画像が表示されません...「src/」を配置するとわかりますresImgの前では、BufferedImageはIDEの外部に表示されません。誰か助けてもらえますか?これは、IDE内で機能するコードです。.jarファイルから外部で実行すると、イメージは表示されません。

static File f = new File("src/resImg/banner.png");

try {
        banner = ImageIO.read(f);
        picLabel = new JLabel(new ImageIcon(banner));
        LabelPanel.add(picLabel);
    } catch (IOException ex) {
        Logger.getLogger(GameStart.class.getName()).log(Level.SEVERE, null, ex);
    }
4

5 に答える 5

2

リソースが jar ファイルにある場合、それはローカル ファイル システム上のファイルではありません。使用する必要があります

URL imageSource = getClass().getResource("/resImg/banner.png");
if (imageSource == null) {
    // Handle the resource being missing
}
picLabel = new JLabel(new ImageIcon(imageSource));

ここでは、jar ファイル内のファイルにアクセスできるクラスローダーからリソースを取得しています。

于 2012-10-02T13:57:37.847 に答える
1

jar から画像を取得する場合は、次のように smth を使用します。

URL imageurl = getClass().getResource("/images/imagename");
于 2012-10-02T13:59:08.823 に答える
1

FileJAR ファイルでリソースのオブジェクトを作成することはできません。代わりにこれを使用してください。

URL imgurl = this.getClass().getClassLoader().getResource("resImg/banner.png");
picLabel - new JLabel(new ImageIcon(imgurl));

お役に立てれば。

于 2012-10-02T13:59:59.387 に答える
1

親ディレクトリを見つける必要があります。相対パスは次のように開始できます

  • ワークスペース ディレクトリ
  • プロセスが開始するディレクトリ

相対パスは、Java プロセスが開始された場所からの「realtiv」であるため、パスは時々変更される可能性があります。

写真が瓶に入れられている場合は、使用できます

getClass().getResource("relativ jar path")

イメージを見つけるためです。瓶自体は、それがどこに配置されているかを知っています。

于 2012-10-02T14:00:31.183 に答える
0

最も可能性の高い原因は、イメージが jar ファイル内にパックされていないことです (これを jar / zip ツールで確認してください)。

画像はあるのに表示されない場合は、作業ディレクトリに関連するファイル システムからこれを読み取ろうとしていることが原因です (実際には存在しません)。

したがって、適切な解決策は、クラスパスから画像を読み取ることです。

Thread.currentThread().getContextClassloader().getResourceAsStream(... path to your image relative to jar root ---)
于 2012-10-02T13:59:44.033 に答える