Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';t getImage()返回错误或显示图像?_Java_Swing - Fatal编程技术网

Java 为什么';t getImage()返回错误或显示图像?

Java 为什么';t getImage()返回错误或显示图像?,java,swing,Java,Swing,我试图在我正在编写的应用程序中使用getImage()在JPanel上显示图像。我试着让它为我工作,并最终发现,即使路径完全不正确,它仍然不工作,也不会像预期的那样返回NullPointerException Image i; public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; g2d.drawImage(i, 0,

我试图在我正在编写的应用程序中使用
getImage()
JPanel
上显示图像。我试着让它为我工作,并最终发现,即使路径完全不正确,它仍然不工作,也不会像预期的那样返回
NullPointerException

Image i;    

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D)g;
    g2d.drawImage(i, 0, 0, 200, 200, this);
} // end paintComponent();

public Pnl() {
    super();
    setBackground(Color.GREEN);
    setBorder(BorderFactory.createLineBorder(Color.GRAY, 10));
    i = Toolkit.getDefaultToolkit().getImage("shrek.jpg");
} // end constructor    

当我使用
getImage()
中的参数“shrek…jdhd”或类似的参数运行代码时,它会做完全相同的事情。

有几种不同的方法可以读取图像

  • 使用
    图像图标
    ,然后从中提取
    图像
  • 使用
    ImageIO
  • 我怀疑你的图像路径有问题。试试这个:

    Path imgPath = Paths.get("/path/to/image.png");
    if(Files.exists(imgPath)){
        // do whatever
    } else{
    
        // incorrect path
    }
    
    如果路径确实存在:

    ImageIcon imageAsIcon = new ImageIcon(imgPath.getAbsolutePath());
    Image imageOfIcon = imageAsIcon.getImage();
    
    现在,您可以检索它的
    图形
    对象并执行任何操作
    例如,可以将其转换为
    buffereImage

    您也可以尝试使用
    ImageIO
    ,如下所示:

    BufferedImage img;
    
    try {
        URL url = new URL(new File("/path/to/image.png");
        img = ImageIO.read(url);
    } catch (IOException e) {
    }
    
    我正在尝试使用getImage()在屏幕上显示图像

    当你发布一个问题时,如果你需要帮助,请发布一个适当的帖子,否则我们会花时间猜测

    例如,可能图像读取正确,但问题是面板的大小为(0,0),因此没有任何可绘制的内容

    您还应该重写
    getPreferredSize()
    方法以返回(200200)的维度,因为这是您要绘制图像的大小


    如果没有显示如何使用此面板的SSCCE,我们只是猜测。

    为什么您希望上面的代码抛出NPE?上面代码中的任何内容都不应该这样做。您是否测试过您的图像是否为空?我将使用
    ImageIO.read(…)
    获取图像,并将其作为资源而不是文件获取。我会在使用前检查空值。这是你的全部代码吗?你甚至从未将图像绘制到屏幕上。同样,新代码中没有任何东西会抛出NPE。再次测试图像是否为空。您可以使用println语句来帮助调试。再次使用
    ImageIO.read(…)
    。同样,将图像作为资源而不是文件获取。我觉得你好像忽视了我的建议。你有没有尝试过
    g2d.drawImage(null,0,0,200200,this)查看它的功能?试着检查一下
    i
    实际上等于什么?试试这些家伙在说什么。尝试以不同的方式加载图像。尝试实际检查内容是否为空。如果stuff不为null,请尝试将参数打印到控制台以进行调查。您可以使用ImageIO.read,另一种方法是BuffereImage构造函数获取字节数组。如果这样做的话,您可以使用一些基本的东西,比如FileInputStream。其他加载图像的方法只需要额外的5行代码。