java - 无法在 JFrame 中显示 JPEG 图像

标签 java image swing embedded-resource imageicon

我正在尝试为我正在编写的小游戏获取背景图像以显示在 JFrame 上。图像是 .jpg,我不断收到这些错误:

Exception in thread "main" java.lang.NullPointerException
     at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
     at web.game.Base.<init>(Base.java:45)
     at web.game.Base.main(Base.java:61)

我的代码是:

Image myimage;

public Base() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("myimage.jpg"));
    myimage = ii.getImage();
}

public void paint(Graphics g) {

    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(myimage, 10, 10, null); 

最佳答案

您遇到问题的原因有很多。最明显的开始,图像不存在(或者至少不存在你认为它存在的地方)

private BufferedImage myImage;

public Board() { 
    try {
        myimage = ImageIO.read(this.getClass().getResource("/myimage")); 
    } catch (IOException exp) {
        exp.printStackTrace();
    }
} 

protected void paintComponent(Graphics g) { 
    super.paintComponent(g);
    if (myImage != null) {
        Graphics2D g2d = (Graphics2D) g; 
        g2d.drawImage(myimage, 10, 10, this); 
        System.out.println("Background Image"); 
    }
} 

您可能会发现 Performing Custom PaintingReading/Loading an Image有一定的用处。

使用 getResource 时,您有两个(基本)选择。相对或绝对。

使用相对路径,类加载器将根据类的上下文开始搜索。因此,如果您的图像位于项目的根文件夹中,但您的类位于(包的)子文件夹中,则相对路径将不起作用,因为类加载器将从类所在的位置开始搜索。

绝对路径将允许您从类路径的根开始搜索,这将更有帮助,尤其是在您的情况下。

尝试这样的事情,看看你会得到什么..

System.out.println(TestReference.class.getResource("myimage.jpg"));
System.out.println(TestReference.class.getResource("/myimage.jpg"));

关于java - 无法在 JFrame 中显示 JPEG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893410/

相关文章:

java - GWT CellTree @UIHandler SelectionChanged

java - Neo4j - java.lang.NoClassDefFoundError : org/parboiled/scala/Parser

python - 对象检测 - 如何将坐标内的操纵像素重新应用到原始图像以突出显示 RoI

java - removeAll() 后无法添加到 JFrame

java - 如何创建多部分 zip 文件并读回?

c# - 下载时如何调整图像大小?

Swift - 图像上的 cornerRadius 不起作用

java - 如何拥有一个可滚动的 JTextPane?

java - 设置 JSlider 限制

java - 如何从列表中获取记录的最高版本