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行代码。