4

その上に画像のあるボタンが必要なプログラムを書いていますが、これまでのところ、それを機能させることができませんでした。How do I add an image to a JButtonなど、このサイトの他のいくつかの投稿を確認しました。
私のコード:

public class Tester extends JFrame
{
    public Tester()
    {
        JPanel panel = new JPanel();
        getContentPane().add(panel);
        panel.setLayout(null);

        setTitle("Image Test");
        setSize(300,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JButton button = new JButton();
        try 
        {
            Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
            button.setIcon(new ImageIcon(img));
        } 
        catch (IOException ex) {}

        button.setBounds(100,100,100,100);
        panel.add(button);
    }

    public static void main(String[] args)
    {
        Tester test = new Tester();
        test.setVisible(true);
    }
}

このコードを実行すると、「Exception in thread "main" java.lang.IllegalArgumentException: input == null!」というエラーが発生します。このエラーは次の行で発生します。

Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));

上記のリンクで推奨されているように、私の Images フォルダーは src フォルダー (私は Eclipse を使用しています) にあるため、このエラーは Java コードによってファイルが見つからないことが原因ではないと思います。
誰が問題が何であるかについて何か考えを持っていますか?
ありがとう。

4

5 に答える 5

9

Eclipseを使用している間は、画像をsrcフォルダーに保持せず、代わりSource Folderにこの目的でを作成します。Eclipseのリソースフォルダーに画像を追加する方法については、このリンクを参照してください。

于 2012-10-02T14:17:14.233 に答える
2

getResource()次のように、パッケージ名の前にスラッシュを入れてみてください。

Image img = ImageIO.read(getClass().getResource("/Images/BBishopB.gif"));
于 2012-10-02T14:14:56.757 に答える
2

これを使用してボタンを作成します。

JButton button = new JButton(new ImageIcon(getClass().getClassLoader()
                                          .getResource("Images/BBishopB.gif")));

そして、あなたがしていることはImageアイコンとして設定することです。メソッドにはインターフェイスsetIcon()を実装するオブジェクトが必要なため、これは機能しません。Iconお役に立てれば。

于 2012-10-02T14:07:46.367 に答える
1

画像を直接見つけることができます:

JButton jb = new JButton(new ImageIcon("pic.png")); //pic is in project root folder
//Tip: After placing the image in project folder, refresh the project in Eclipse.

または、画像がJARにある場合は、通常、再利用できるように取得を行う関数を作成します。

public static ImageIcon retrieveIcon(String path){
    java.net.URL imgUrl = 'classpackage'.'classname'.class.getResource(path);
    ImageIcon icon = new ImageIcon(imgUrl);
    return icon;
}

それならやります、

JButton jb = new JButton(retrieveIcon("/pic.png"));
于 2012-10-02T14:22:06.067 に答える
1
Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));

この行は一度に多くのことを行おうとしているため、エラーが発生したときに追跡するのが難しくなっています。分割することをお勧めします:

URL imgURL = getClass().getResource("Images\\BBishopB.gif");
Image img = ImageIO.read(imgURL);

imgURLこれで、Eclipse デバッガーを使用して、NPE の可能性が最も高いの戻り値を確認できます。エラー メッセージが表示される理由はわかりませんが、問題をかなり絞り込むことができます。

于 2012-10-03T04:08:03.993 に答える