0

まず、JLabelとImageIconを使用しました。それはうまくいきました。ただし、JARにエクスポートしたときに画像が表示されません。
そこで、独自のImagePanelを作成し、drawImageメソッドを使用して表示しました。しかし、それは終了し、

スレッド「main」の例外java.lang.IllegalArgumentException:input == null!

さて、私のコードは以下のとおりです。

スタートメニュー

public class startMenu extends JFrame{
  ...
  URL imgUrl = getClass().getResource("images/contacts.png");

  public startMenu(){
    ...
    ImagePanel imgPanel = new ImagePanel(imgUrl);
  }

}

ImagePanel

public class ImagePanel extends JPanel{

    private Image image;
    private URL imgUrl;

 public ImagePanel(URL url){
        this.imgUrl= url;

        try{    
            image = ImageIO.read(imgUrl);
        } 
        catch (IOException e) {
            System.out.println("no such file");
        }
    }

 @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(image!=null){
             g.drawImage(image, 10, 12, 128, 128, this);
        }
        else{
            g.drawImage(image, 0, 0, this);
        }
    }

    @Override
    public Dimension getPreferredSize() {
       return new Dimension(150,150);
    }
}

imageUrlでImageIconを使用する場合。同じエラーメッセージが表示されます。

  URL imgUrl = getClass().getResource("images/contacts.png");
    private ImageIcon adBook = new ImageIcon(imgUrl);
    private JLabel mainImg = new JLabel(adBook);
4

1 に答える 1

0

問題は、画像が配置されている場所です。「src」と「bin」があるディレクトリ内に常に画像を直接保存しました。"but getClass().getResource("...")" は bin のパスを返します。したがって、画像フォルダーを「src」に移動するだけで、このディレクトリのコピーが「bin」に自動的に作成されます。問題が解決しました。

URL imgUrl = getClass().getResource("images/contacts.png");

返品-->Q:\workspace\project name\bin\images\contacts.png

于 2012-05-28T15:42:22.180 に答える