Applet上的Java NullPointerException

问题描述 投票:0回答:1

我正在尝试将小程序嵌入HTML以在Uni类中进行演示。每次我尝试运行执行小程序时,都会出现一个NullPointerException对话框。我在做什么错?

<html>
  <head>
    <title> This is my Pacman! </title>
      <body bgcolor = black text= yellow>
        <center>
          <applet code="pacman.InitialClass.class" archive="pacSimq.jar"
            width=300 height=350>
          </applet>
         </center>
         <hr>
           <a href="https://github.com/awernick/PacSim"> The repository. </a>
      </body>
</html>

这是小程序的主要类。该罐还包含多个类。

package pacman;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferStrategy;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.Random;

@SuppressWarnings("serial")
public  class InitialClass extends Applet implements Runnable, KeyListener {

    private final int WIDTH = 224;
    private final int HEIGHT = 288;
    private Map map;
    private Hero pacman;
    private Blinky blinky;
    private Graphics second;
    private Image image, bg, current,current_bl, pm1, pm2, pm3, pm4, pm5, pm6, pm7, pm8, pm9,bl1,bl2,bl3,bl4,bl5,bl6,bl7,bl8;
    private URL base;
    private int counter;

    public void init() {
        setSize(WIDTH, HEIGHT);
        setBackground(Color.BLACK);
        setFocusable(true);
        addKeyListener(this);
        Frame frame = (Frame) this.getParent().getParent();
        frame.setTitle("Pac-Man");
        frame.setResizable(false);
        try {
            base = getDocumentBase();
            System.out.println(base);
        } catch (Exception e) {

        }

        pm1 = getImage(base, "data/pac_1.png");
        pm2 = getImage(base, "data/pac_2.png");
        pm3 = getImage(base, "data/pac_3.png");
        pm4 = getImage(base, "data/pac_4.png");
        pm5 = getImage(base, "data/pac_5.png");
        pm6 = getImage(base, "data/pac_6.png");
        pm7 = getImage(base, "data/pac_7.png");
        pm8 = getImage(base, "data/pac_8.png");
        pm9 = getImage(base, "data/pac_9.png");

        bl1 = getImage(base, "data/bl_1.png");
        bl2 = getImage(base, "data/bl_2.png");
        bl3 = getImage(base, "data/bl_3.png");
        bl4 = getImage(base, "data/bl_4.png");
        bl5 = getImage(base, "data/bl_5.png");
        bl6 = getImage(base, "data/bl_6.png");
        bl7 = getImage(base, "data/bl_7.png");
        bl8 = getImage(base, "data/bl_8.png");

        bg = getImage(base, "data/bg1.png");

        current = pm1;
        current_bl = bl1;
    }

    @Override
    public void start() {
        map = new Map();
        pacman = new Hero();
        blinky = new Blinky(map,pacman);

        Thread graphics_thread = new Thread(this);
        Thread blinky_thread = new Thread(blinky);
        Thread pacman_thread = new Thread(pacman);
        graphics_thread.start();
        blinky_thread.start();
        pacman_thread.start();
    }

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    @Override
    public void run() {
        while (true) {
            //pacman.update();
            //blinky.update(pacman.getCenterX(), pacman.getCenterY());
            if (pacman.isMvRight()) {
                current = pm2;
                current_bl = bl2;
            } else if (pacman.isMvLeft()) {
                current = pm4;
                current_bl = bl4;
            } else if (pacman.isMvUp()) {
                current = pm6;
                current_bl = bl6;
            } else if (pacman.isMvDown()) {
                current = pm8;
                current_bl = bl8;
            }
            repaint();
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void update(Graphics g) {
        if (image == null) {
            image = createImage(this.getWidth(), this.getHeight());
            second = image.getGraphics();
        }

        second.setColor(getBackground());
        second.fillRect(0, 0, getWidth(), getHeight());
        second.setColor(getForeground());
        paint(second);

        g.drawImage(image, 0, 0, this);
    }

    @Override
    public void paint(Graphics g) {
        g.drawImage(bg, 0, 0,this);
        g.drawImage(current, pacman.getCenterX(), pacman.getCenterY(), this);
        g.drawImage(current_bl, blinky.getCenterX(), blinky.getCenterY(), this);
    }

    @Override
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            pacman.setMvUp(true);
            //System.out.println("hello");
            pacman.moveUp();
            //System.out.println("hello");

            break;

        case KeyEvent.VK_DOWN:
            //System.out.println("hello");
            pacman.setMvDown(true);
            pacman.moveDown();
            break;

        case KeyEvent.VK_LEFT:
            pacman.setMvLeft(true);
            pacman.moveLeft();
            break;

        case KeyEvent.VK_RIGHT:
            pacman.setMvRight(true);
            pacman.moveRight();
            break;

        case KeyEvent.VK_SPACE:
            pacman.stop();
            break;

        }

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }

}

这是Java控制台向我显示的错误。

java.lang.NullPointerException
    at pacman.InitialClass.init(InitialClass.java:34)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我通过eclipse将其打包到一个jar中,但仍然收到NullPointerException。可能是什么原因造成的?

java html eclipse nullpointerexception applet
1个回答
1
投票
    Frame frame = (Frame) this.getParent().getParent();
    frame.setTitle("Pac-Man");  // line 34

第34行上唯一可能是null的是frame属性。在applet生命周期的这一点上,applet显然尚未添加到根框架。


0
投票

尝试放置

frame.setTitle(“吃豆人”);

在“ start()”方法中

任何其他问题:[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.