为什么getImage()没有返回错误或显示图像?

时间:2013-10-20 01:38:38

标签: java swing

我正在尝试使用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 ... jdhhd”之类的参数运行代码时,它完全相同。

2 个答案:

答案 0 :(得分:3)

  

我正在尝试使用getImage()在

上显示图像

当您发布问题时,如果您需要帮助,请发布正确的SSCCE,否则我们会花时间猜测。

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

您还应该覆盖getPreferredSize()方法以返回尺寸为(200,200)的尺寸,因为这是您要在其上绘制图像的尺寸。

如果没有显示该面板使用方式的SSCCE,我们只是在猜测。

答案 1 :(得分:2)

您可以通过几种不同的方式阅读图像。

  1. 使用ImageIcon,然后从中提取Image
  2. 使用ImageIO
  3. 我怀疑你的图片路径有问题。试试这个:

    Path imgPath = Paths.get("/path/to/image.png");
    if(Files.exists(imgPath)){
        // do whatever
    } else{
    
        // incorrect path
    }
    

    如果确实存在Path

    ImageIcon imageAsIcon = new ImageIcon(imgPath.getAbsolutePath());
    Image imageOfIcon = imageAsIcon.getImage();
    

    现在,您可以检索其Graphics对象并执行任何操作 比如将其转换为BufferedImage

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

    BufferedImage img;
    
    try {
        URL url = new URL(new File("/path/to/image.png");
        img = ImageIO.read(url);
    } catch (IOException e) {
    }