【问题标题】:java.lang.NullPonterException when using Graphics.drawImage(image, x, y, ImageObserver)java.lang.NullPonterException 使用 Graphics.drawImage(image, x, y, ImageObserver)
【发布时间】:2013-06-16 01:47:07
【问题描述】:

我尝试过在面板上使用 ImageIcon 绘制和图像的方式,我尝试过使用 ImageIO.read 绘制的方式,我已经构建和重新构建了多个项目,并且每次我收到如下错误消息:

Exception in thread "main" java.lang.NullPointerException
    at Image_Test.screen.draw(screen.java:41)
    at Image_Test.Basic.run(Basic.java:23)
    at Image_Test.Basic.main(Basic.java:16)

screen.java:41 是一行代码:

g.drawImage(test, 100, 100, null);

我看过 4 或 5 个不同作者的教程,所有这些教程都使用 null 作为该方法的最后一个参数。这是我的整个 Basic 类(具有 main 方法)以及我的屏幕类(具有 drawImage 方法)的副本。这是项目中仅有的两个类。

package Image_Test;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;

public class Basic
{
    public JFrame window;
    public String title = "The Title for This Window";
    public screen screen = new screen();
    public Graphics g;

    public static void main(String[] args) { new Basic().run(); }

// The run() method is pretty much the main method
    public void run ()
    {
        buildWindow();
        screen.draw(g);
    }

    public void buildWindow ()
    {
        window = new JFrame(title);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        window.add(screen, BorderLayout.CENTER);

        window.setSize(1366, 768);

        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        window.setLocation(dim.width/2-window.getSize().width/2, dim.height/2-window.getSize().height/2);

        window.setVisible(true);
    }   
}

package Full_Game_Test_02;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;

public class screen extends JPanel
{
    public Image Start_Idle;
    public Image Start_Active;
    public Image Exit_Idle;
    public Image Exit_Active;

    Image test = null;

    public screen ()
    {
        test = screen.loadImage("/Start_Active.png");
    }

    public void loadImages ()
    {
        Start_Active = new ImageIcon("C:\\Developing\\Start_Active").getImage();
        Exit_Idle = new ImageIcon("C:\\Developing\\End_Idle").getImage();
        Exit_Active = new ImageIcon("C:\\Developing\\End_Active").getImage();
    }

    public void draw (Graphics g)
    {
        g.drawImage(test, 100, 100, null);
    }

    public static Image loadImage (String file)
    {
        Image image = null;

// Exception 1      
        try
        {
            image = ImageIO.read(screen.class.getResource(file));
        }
        catch (Exception e1)
        {
            System.out.println("Exception 1");
        }

        return image;
    }
}

【问题讨论】:

  • PS:一个更简单的让你的 JFrame 居中的方法是调用setLocationRelativeTo(null),而不是计算它。

标签: image nullpointerexception jpanel bufferedimage drawimage


【解决方案1】:

这一行:

    screen.draw(g);

不起作用(gis null 并导致异常),而且不需要。您的成员变量g 也不是。

如果您有一个JPanel(或子类,如Screen)以JFrame 或类似名称显示在屏幕上,Swing 将负责绘制。

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多