0

2つのディレクトリが上にある画面に画像を配置するにはどうすればよいですか?これが私のコードです:

package mousemaze;

// Imports
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class LoadScreen extends JPanel {
    private static final long serialVersionUID = 1L;

    private String logoPath = "././images/snakyboLogo.png";
    BufferedImage logoImage;
    JLabel logoLabel;

    public LoadScreen() {
        try {
            System.out.println(logoPath);
            logoImage = ImageIO.read(new File(logoPath));
            System.out.println("1");
            logoLabel = new JLabel(new ImageIcon(logoImage));
            System.out.println("2");
            add(logoLabel);
            System.out.println("End");
        } catch (IOException ex) {
            System.out.println("Fail");
        }
    }
}

しかし、それは失敗します

logoImage = ImageIO.read(new File(logoPath));

そのため、そのディレクトリで指定されたファイルが見つからないと思います。私のフォルダ構造は次のとおりです。

  • src \ mousemaze \ LoadScreen.java
  • src \ images \ snakyboLogo.png

だから私はこれが完全に異なるパッケージでファイルを指定する方法ではないと推測しています、それで私はこれをどのように行うのですか?

4

1 に答える 1

2
  • 問題 1 - パス リテラル.が現在のディレクトリに解決されます..
  • 問題 2 - 相対パスを使用して Java のファイルから読み取ることは決してお勧めできません。アプリケーションが想定された構造以外にデプロイされた場合、アプリケーションは壊れます

リソースストリームを使用すると、より多くのマイレージを獲得できます

InputStream logoStream = getClass().getResourceAsStream("/images/snakyboLogo.png");
if(logoStream != null) logoImage = ImageIO.read(logoStream);
于 2013-02-21T17:58:04.213 に答える