【问题标题】:Why is this Swing Timer code is throwing a NullPointerException?为什么这个 Swing Timer 代码会抛出 NullPointerException?
【发布时间】:2013-08-05 18:40:50
【问题描述】:

我正在尝试使用 Swing Timer 在 Java 中为椭圆设置动画。我相信下面的代码应该可以完成这项工作,但是当我运行我的程序时,计时器会抛出一个NullPointerException。知道为什么会这样吗?

我已经排除了包含主线的代码,因为它不相关。这是我的错误,发生在actionlisteneractionperformed 方法的第一行:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Timer$MoveListener.actionPerformed(Timer.java:18)

面板类:

import java.awt.geom.*;

public class Glitchpanel extends javax.swing.JPanel {

    private Ellipse ellipse;
    private java.awt.Dimension size;
    private Timer timer;

    public Glitchpanel() {
        super();

        ellipse = new Ellipse();
        size = new java.awt.Dimension(1000, 1000);
        timer = new Timer(ellipse, this);
        timer.start();

        this.setSize(size);
        this.setPreferredSize(size); 
        this.setBackground(java.awt.Color.WHITE);
}

    public void paintComponent(java.awt.Graphics g) {
        super.paintComponent(g);
        java.awt.Graphics2D brush = (java.awt.Graphics2D) g;
        brush.draw(ellipse);
    }
}

定时器类:

import java.awt.geom.*;

public class Timer extends javax.swing.Timer {

    private Glitchpanel glitch;
    private Ellipse ellipse;

    public Timer(Ellipse ellipse, Glitchpanel glitch) {
        super(100, null);
        ellipse = ellipse;
        glitch = glitch;
        this.addActionListener(new MoveListener());
    }

    private class MoveListener implements java.awt.event.ActionListener {

        public void actionPerformed(java.awt.event.ActionEvent e) {
            ellipse.setX(ellipse.getX()+1);
            ellipse.setY(ellipse.getY()+1);
            glitch.repaint();
        }
    }
}

形状类(试图为这个对象设置动画):

public class Ellipse extends java.awt.geom.Ellipse2D.Double {

    private Glitchpanel glitch;
    private double x, y, w, h;

    public Ellipse() {
        super();

        double x = 100;
        double y = 100;
        double w = 100;
        double h = 100;
        this.setFrame(x, y, w, h);
    }

    public void setX(double x2) {
        x = x2;
    }

    public void setY(double y2) {
        y = y2;
    }
}

【问题讨论】:

    标签: java swing animation timer nullpointerexception


    【解决方案1】:

    变化:

    public Timer(Ellipse ellipse, Glitchpanel glitch) {
        super(100, null);
        ellipse = ellipse;
        glitch = glitch;
        this.addActionListener(new MoveListener());
    }
    

    到:

    public Timer(Ellipse ellipse, Glitchpanel glitch) {
        super(100, null);
        this.ellipse = ellipse;
        this.glitch = glitch;
        this.addActionListener(new MoveListener());
    }
    

    【讨论】:

    • 我做了上述无济于事 - 仍然得到相同的空指针。不过谢谢!
    • @user2654199 真的是同一个吗?错误是 ellipse 为空。通过不设置glitch 也可以得到几乎相同的错误(我在上面的代码中都修复了)
    • 我说得太早了,这实际上解决了它。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多