1

画像を読み込んで背景に設定しようとしていますが、selectionPanel メソッドで「背景画像を読み込めませんでした」というエラーが表示されます。

画像処理に問題があるようですが、原因がわかりません。

public class selectionPanel extends JPanel
{
  //Variable with the name of our pic
  private static final String path = "selbkgrnd.jpg";
  private ImageIcon imageIcon;
  private Dimension windowSize;
  private int imageHeight;
  private int imageWidth;

  protected selectionPanel()
  {

    this.imageIcon = new ImageIcon("selbkgrnd.jpg"); //Save image to imageIcon
    Image image = this.imageIcon.getImage();
    this.imageWidth = image.getWidth(null);
    this.imageHeight = image.getHeight(null);
    if ((this.imageWidth == -1) || (this.imageHeight == -1)) //Check if background image is succesfully loaded
    {
      JOptionPane.showMessageDialog(JOptionPane.getDesktopPaneForComponent(this), "Could not load background image", "Fatal error!", 0);

      System.exit(-1);
    }
    this.windowSize = new Dimension(this.imageWidth, this.imageHeight);
  }

  protected void startScreen()
  {
    setOpaque(false);
    setSize(this.windowSize);
  }

  protected int getImageHeight()
  {
    return imageHeight;
  }

  protected int getImageWidth()
  {
    return imageWidth;
  }

  @Override
  public void paintComponent(Graphics g)
  {
    g.drawImage(this.imageIcon.getImage(), 0, 0, null);
    super.paintComponent(g);
  }
}
4

1 に答える 1

0

通常、これはイメージ ファイルの場所が間違っていることが原因です。画像への完全なパス、または次のコマンドで見つけることができるユーザーのディレクトリへの相対パスのいずれかを使用してみてください。

System.out.println("user directory: " + System.getProperty("user.dir"));

あなたの状態を編集
:

フルパスで機能していただきありがとうございますが、ソースコードフォルダー内にある場合、画像名だけで機能するはずではありませんか?

いいえ。ここでも、Java はユーザー ディレクトリに関連するファイルを探します。

ただし、イメージがクラス ファイル ディレクトリまたはこれに関連するディレクトリにあり、これから jar ファイルを作成し、イメージにアクセスする必要がある場合は、ファイルを使用できないことに注意してください。画像をリソースとして取得する必要があり、相対パスはuser.dir に関連するのではなく、クラス ファイルの場所に関連するため、異なります。

于 2013-04-06T16:04:10.350 に答える