java - 方法调用不起作用?(Java NullPointerException)

标签 java graphics methods nullpointerexception

这是我的主要代码:

package main;
  import java.awt.*;
  import java.awt.event.*;

  import javax.swing.*;






    public class Panel extends JPanel{
public Thread update;
public YourPaddle pa;
public EnemyPaddle ea;
public static int fps;
public static long lasttimechecked = System.nanoTime();
public static int frames = 0;
public Panel(){
    addKeyListener(new TAdapter());
    setFocusable(true);
    setBackground(Color.BLACK);
    setDoubleBuffered(true);

    pa = new YourPaddle();
    update = new Thread(){
        public void run(){
            for (int i = 0; i < 2; ) {
                pa.gor();
                try{
                ea.gorg();
                }catch(Exception e){

                }
                repaint();
                try {
                    Thread.sleep(2);
                }catch(Exception e){

                            }
                frames++;
                if (System.nanoTime() - lasttimechecked >= 1000000000){
                    fps = frames;
                    frames = 0;
                    lasttimechecked = System.nanoTime();
                }

            }

        }
    };

    update.start();
}

public void paint(Graphics g){      
    super.paint(g);
    g.setColor(Color.white);
    g.drawLine(300, 10, 300, 340);      
    g.drawImage(pa.i, 20, pa.getY(), this);

    g.drawImage(ea.i, 550, ea.getYy(), this);

    g.drawString("FPS: " + fps + "   Y: " + pa.getY(), 10,17);
    Toolkit.getDefaultToolkit().sync();
    g.dispose();
}

 private class TAdapter extends KeyAdapter {

        public void keyReleased(KeyEvent e) {
            pa.keyReleased(e);
            ea.keyReleased(e);
       }

       public void keyPressed(KeyEvent e) {
            pa.keyPressed(e);
            ea.keyReleased(e);
        }
    }

        }

基本上是这样的,第四个游戏是乒乓球,这个类(class)中有一个名为 pa 的 Racket 。 pa 桨可以工作,但我将相同的内容复制到另一个类中,但重命名了所有方法。当我运行程序时,pa paddle 工作,但敌人桨(ea)给我一个错误,说该方法是空指针异常。这是堆栈跟踪:

    Exception in thread "Thread-2" java.lang.NullPointerException
at main.Panel$1.run(Panel.java:31)
     Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.Panel.paint(Panel.java:61)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at java.awt.Window.paint(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1000(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

谁能告诉我为什么只有一个桨不起作用?这是同样的事情...

最佳答案

  1. 我没有看到任何 ea 开始初始化的地方...
  2. 我会避免覆盖 paint 并使用 paintComponent 代替。查看Performing Custom PaintingPainting in AWT and Swing .

这可能是开始使用调试器的好时机;)

关于java - 方法调用不起作用?(Java NullPointerException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028431/

相关文章:

java - 如何将另一个类的 boolean 方法放入 if 语句中

javascript - 单独适用于页面上多个元素的方法

java - 无法让 JFrame 简单的类似绘画的程序与键绑定(bind)一起使用

opengl - 如何判断计算机是否支持 OpenGL 2.0? (我想写着色器)

java - 强制小程序加载到同一个 JVM 实例中?

java - 从列表中获取唯一/不重复的值

javascript - 相对于线段平移坐标

vue.js - Nuxt/ View : Component call a Method in a page

java - 仅在一个 Android Activity 中执行线程

java - Android 的 Mapbox 地理编码服务仅适用于美国?