0

画像のパスはすべて正しいだけです。なぜこのエラーが発生するのかわかりません。誰でも何か考えがありますか?

コードは、フレームに背景画像を配置し、その画像の上にボタンを追加するためのものです

エラーは

Uncaught error fetching image:
    java.lang.NullPointerException
        at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99)
        at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:113)
        at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240)
        at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
        at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)

コード

コードの実行中にエラーが発生しました:

        public class BackgroundImg extends JPanel {

            private Image img;

          public BackgroundImg (String img)
          {
              this(new ImageIcon(img).getImage());
          }

          public BackgroundImg (Image img)
          {
            this.img = img;
            Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
            setPreferredSize(size);
            setMinimumSize(size);
            setMaximumSize(size);
            setSize(size);
            //setLayout(null);
          }

            @Override
          public void paintComponent(Graphics g)
            {
                super.paintComponent(g);
            g.drawImage(img, 0, 0, null);
          }
        }

        public class ApplicationFrame {

        public static void main(String[] args) throws ImageAccessException {
        BackgroundImg panel = new BackgroundImg(Toolkit.getDefaultToolkit().createImage(ApplicationFrame.class.getResource("C:\\test.png")));
    JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(800, 600);

                frame.getContentPane().add(panel);
                ApplicationContents.addContentsToPane(panel);

                frame.setVisible(true);
                //   frame.setVisible(true);

            }

        }


    }
public class ApplicationContents {
    public static void addContentsToPane(Container pane)
    {
        //pane.setLayout(null);
        pane.setLayout(new FlowLayout());

        JButton b1 = new JButton("Test");

        pane.add(b1);

        //Insets insets = pane.getInsets();
        //Dimension size = new Dimension(120,32);

        // b1.setBounds(0 + insets.left, 0 + insets.top,
         //            size.width, size.height);


         b1.addActionListener(
                 new ActionListener()
         {
             public void actionPerformed(ActionEvent event)
            {

                 JOptionPane.showMessageDialog(null, "Test" , "Test", JOptionPane.ERROR_MESSAGE);
            }
         }
         );
    }

}
4

2 に答える 2

5

getResource() は、OS パスではなくクラスパスからリソースをロードするため、「C:\test.png」が正しいとしても、その方法でロードすることはできません。

また、getResource() を使用する前に戻り値を確認して、この種のエラーをキャッチしてください。

イメージを jar 内のリソースとしてバンドルし、jar 内の場所を指定するパスを使用してロードすることができます。

于 2012-05-21T08:05:47.523 に答える
3

Toolkit.getDefaultToolkit().createImage("c:\\tmp\\test.png");を使用する必要があります。静的フォルダーから画像を取得するか、jar 内に画像を含めたい場合は、画像パスを .class ファイルに相対的に設定します。

于 2012-05-21T08:23:23.903 に答える