Java 尝试创建BuffereImage时引发IllegalArgumentException

Java 尝试创建BuffereImage时引发IllegalArgumentException,java,null,bufferedimage,illegalargumentexception,Java,Null,Bufferedimage,Illegalargumentexception,我想知道,当我将这段代码从一个Java项目复制并粘贴到另一个Java项目时,为什么会出现这个问题,并且在第一个项目中没有遇到任何问题 我试图显示一个4x4的正方形网格 第37行引发了以下异常: 线程“main”java.lang.IllegalArgumentException中出现异常:输入==null 公共类任务{ 私人JPanel小组; 私有网格c; 私有缓冲图像; 公共任务(JPanel小组){ this.panel=面板; c=新的GridBagConstraints(); displ

我想知道,当我将这段代码从一个Java项目复制并粘贴到另一个Java项目时,为什么会出现这个问题,并且在第一个项目中没有遇到任何问题

我试图显示一个4x4的正方形网格

第37行引发了以下异常:

线程“main”java.lang.IllegalArgumentException中出现异常:输入==null

公共类任务{
私人JPanel小组;
私有网格c;
私有缓冲图像;
公共任务(JPanel小组){
this.panel=面板;
c=新的GridBagConstraints();
displayGrid();
}
私有void displayGrid(){
c、 gridx=0;
c、 gridy=0;
试一试{
squareImage=ImageIO.read(this.getClass().getResource(“square.gif”);//第37行
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
JLabel squareLabel=新JLabel(新图像图标(squareImage));
对于(int i=0;i<16;i++){
c、 gridx=i%4;
c、 gridy=i/4;
面板。添加(方形标签,c);
panel.validate();
}
}
}

您的代码正在尝试从类路径加载映像。尝试将imagine移动到与编译的任务相同的文件夹中。class

确保已将
square.gif
文件放入项目中。它就在那里。它位于图像文件夹中,与src文件夹处于同一级别。您的意思是我必须将图像移动到src文件夹中吗?我不明白为什么我必须这样做,因为在以前的项目中,我以前没有遇到过这个问题(我通常有一个图像文件夹,它与src文件夹处于同一级别,并且工作正常,没有引发此异常)。这取决于IDE在编译过程中是否将映像复制到已编译文件夹中。仅出于调试目的,请尝试将映像复制到此文件夹中以验证其是否正常工作。然后您可以研究复制资源的方法…我按照您所说的做了,并且不再抛出异常。但是,我的程序实际上什么都没有做。好的,Java找到了这个图像。现在通过检查图像大小来验证它是否正在加载图像。如果图像已加载,则需要调试代码以查看图像未显示的原因。我刚刚意识到它未显示的原因。要么是因为我没有调整图像的大小,要么是因为它完全是白色的。我知道,因为我尝试了另一个图像并加载了它。
public class DistractorTask {

    private JPanel panel;
    private GridBagConstraints c;
    private BufferedImage squareImage;

    public DistractorTask(JPanel panel){
        this.panel = panel;
        c = new GridBagConstraints();
        displayGrid();

    }

    private void displayGrid() {


        c.gridx = 0;
        c.gridy = 0;

        try {
            squareImage = ImageIO.read(this.getClass().getResource("square.gif"));  //line 37
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        JLabel squareLabel = new JLabel(new ImageIcon(squareImage));

        for(int i = 0; i < 16; i++){
            c.gridx = i % 4;
            c.gridy = i / 4;
            panel.add(squareLabel, c);
            panel.validate();

        }

    }
}