java - 使用三个类的 GUI 应用程序上的空指针异常

标签 java swing nullpointerexception

我正在为自己开发一款相当基本的游戏。 Java Swing 新手,但 Cpp 新手。解决手头的问题。

当我开始运行 GUI 应用程序时,我遇到了空指针异常,并给出了四个发生异常的链接(我使用 Eclipse 作为我的 IDE)。但当我看着它们时,我发现线条或周围的任何东西都没有问题。

所以我来看看你们是否能发现我找不到的东西。

此类从源文件夹中抓取图片并设置用于移动的键。

import java.awt.event.KeyEvent;
import java.awt.Image;
import javax.swing.ImageIcon;

public class SPRITES 
{
private int x_sped;
private int y_sped;
private int x;
private int y;
private Image sprite;

public SPRITES()
{
    ImageIcon pine = new ImageIcon(this.getClass().getResource("Untitled.png")); //exception here, line 17
    sprite = pine.getImage();
    x = 0;
    y = 0;
}

public void move()
{
    x += x_sped;
    y += y_sped;
}

public int getX()
{
    return x;
}

public int getY()
{
    return y;
}

public Image getImage()
{
     return sprite;
}

public void keyPressed(KeyEvent e)
{
    int key = e.getKeyCode();

    if(key == KeyEvent.VK_A)
    {
        x_sped = -1;
    }

    if(key == KeyEvent.VK_D)
    {
        x_sped = 1;
    }

    if(key == KeyEvent.VK_W)
    {
        y_sped = -1;
    }

    if(key == KeyEvent.VK_S)
    {
        y_sped = 1;
    }
}

public void keyReleased(KeyEvent e)
{
int key = e.getKeyCode();

    if(key == KeyEvent.VK_A)
    {
        x_sped = 0;
    }

    if(key == KeyEvent.VK_D)
    {
        x_sped = 0;
    }

    if(key == KeyEvent.VK_W)
    {
        y_sped = 0;
    }

    if(key == KeyEvent.VK_S)
    {
        y_sped = 0;
    }
}
}

第二个是安装框架,完成框架制作并完成机芯制作。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Stage extends JPanel implements ActionListener
{
private static final long serialVersionUID = 1L;
private Timer start_stop;
private SPRITES player;
public Stage()
{
    addKeyListener(new TAdapter());
    setFocusable(true);
    setBackground(Color.black);
    setDoubleBuffered(true);

    player = new SPRITES();

    start_stop = new Timer(5, this);
    start_stop.start();

}

public void paint(Graphics character)
{
    super.paint(character);

    Graphics2D G2D = (Graphics2D) character;
    G2D.drawImage(player.getImage(), player.getX(), player.getY(), this);

    Toolkit.getDefaultToolkit().sync();
    character.dispose();
}

public void actionPerformed(ActionEvent arg0) 
{
    player.move();
    repaint();
}

private class TAdapter extends KeyAdapter
{
    public void keyReleased(KeyEvent e)
    {
        player.keyReleased(e);
    }

    public void keyPressed(KeyEvent e)
    {
        player.keyPressed(e);
    }
}
}

这最后一个应该将它们结合在一起......假设我知道如何修复异常。

import javax.swing.JFrame;

@SuppressWarnings("serial")
public class Framing extends JFrame
{
public Framing()
{
    add(new Stage()); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(600, 600);
    setLocationRelativeTo(null);
    setTitle("FLY");
    setResizable(false);
    setVisible(true);
}
public static void main(String[] args)
{
        new Framing();
}
}

是什么导致这些异常发生?我该如何解决该问题以及应该采取哪些措施以避免再次发生这种情况?

最佳答案

我认为您误读了 Eclipse 的堆栈跟踪。除了第一个(顶部的)之外的所有链接都是调用堆栈,它显示了对出现空指针异常的位置进行的调用。

Which fit because the code:
new Framing()
Calls
add(new Stage())
which calls
player = new SPRITES();
Which calls
ImageIcon pine = new ImageIcon(this.getClass().getResource("Untitled.png")); 

这就是你的空指针异常所在的地方。我的猜测是 getResources("Untitled.png");返回 null,然后导致 ImageIcon 构造函数抛出空指针异常。

关于java - 使用三个类的 GUI 应用程序上的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921876/

相关文章:

java - 如何获取对 JFrame 内发生 MouseEvent 的元素的引用

Java异步文本输入输出

java - 在新的 Linux Mint 18.2 上安装 jdk 8

java - JSCH addIdentity 公钥参数没有区别

java - 不断的重画问题

java - 使用 Netbeans IDE 的设计器动态设计 JFrame 表单

java - 为什么我的 Swing GUI 无法从一种 GUI 切换到另一种 GUI?

Android:this.getApplication() 返回 NULL 指针

java - 线程 "AWT-EventQueue-1"java.lang.NullPointerException 中的异常

java - 将 TextView 设置为可见时崩溃