【发布时间】:2014-10-22 23:53:34
【问题描述】:
这是我的第一个问题,我希望它不是太糟糕。
我绝对是java的初学者,可能更低。事实上,我的大部分代码都来自教程,希望我能尽快了解所有内容。
无论如何,到目前为止,我的程序中有 3 个 .java 文件,它显示异常是其中的 3 个,加上一个我从未做过的。
这是完整的错误:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at Emilia.<init>(Emilia.java:17)
at Board.<init>(Board.java:26)
at TestGame.<init>(TestGame.java:7)
at TestGame.main(TestGame.java:18)
这里是所有code:
TestGame.java
import javax.swing.JFrame;
public class TestGame extends JFrame {
public TestGame() {
add(new Board());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
setTitle("Project Obcasus");
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new TestGame();
}
}
Board.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Board extends JPanel implements ActionListener {
private Timer timer;
private Emilia emilia;
public Board() {
addKeyListener(new TAdapter());
setFocusable(true);
setBackground(Color.BLACK);
setDoubleBuffered(true);
emilia = new Emilia();
timer = new Timer(5, this);
timer.start();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(emilia.getImage(), emilia.getX(), emilia.getY(), this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void actionPerformed(ActionEvent e) {
emilia.move();
repaint();
}
private class TAdapter extends KeyAdapter {
public void keyReleased(KeyEvent e) {
emilia.keyReleased(e);
}
public void keyPressed(KeyEvent e) {
emilia.keyPressed(e);
}
}
}
Emilia.java
import java.awt.Image;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
public class Emilia {
private String emilia = "emiliasprite.png";
private int dx;
private int dy;
private int x;
private int y;
private Image image;
public Emilia() {
ImageIcon ii = new ImageIcon(this.getClass().getResource(emilia));
image = ii.getImage();
x = 40;
y = 60;
}
public void move() {
x += dx;
y += dy;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getImage() {
return image;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_A) {
dx = -1;
}
if (key == KeyEvent.VK_D) {
dx = 1;
}
if (key == KeyEvent.VK_W) {
dy = -1;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_A) {
dx = 0;
}
if (key == KeyEvent.VK_D) {
dx = 0;
}
if (key == KeyEvent.VK_W) {
dy = 0;
}
}
}
ImageIcon.java - 第 205 行
this(location, location.toExternalForm());
再说一次,我是初学者,所以如果你们能像对 java(或任何编程语言的新手)一样解释它
感谢您的帮助。 - 尼克西斯
.png 文件的路径:
C:\Users\Damon\workspace\TestGame\Resources\Sprites\Player
.png 文件位于播放器文件夹中。我试图通过 Eclipse 中的运行按钮运行程序。至少,我认为它是运行按钮,因为它首先向我显示了错误。
【问题讨论】:
-
使用 github gist 共享多个文件。以这种方式通过 pastebin 将文件组合成一个文件是一个绊脚石,因为我们无法轻松匹配行号。
-
因为分数低的用户在 SO 上能做的事情是有限的。无论如何,SO也不显示行号。
-
...除非责任归咎于此,否则发布内置类的内部内容并没有多大意义。