我正在尝试使用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”之类的参数运行代码时,它完全相同。
答案 0 :(得分:3)
我正在尝试使用getImage()在
上显示图像
当您发布问题时,如果您需要帮助,请发布正确的SSCCE,否则我们会花时间猜测。
例如,可能正在正确读取图像,但问题是面板的大小为(0,0),因此无需绘制任何内容。
您还应该覆盖getPreferredSize()
方法以返回尺寸为(200,200)的尺寸,因为这是您要在其上绘制图像的尺寸。
如果没有显示该面板使用方式的SSCCE,我们只是在猜测。
答案 1 :(得分:2)
您可以通过几种不同的方式阅读图像。
ImageIcon
,然后从中提取Image
。ImageIO
我怀疑你的图片路径有问题。试试这个:
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) {
}