Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
eclipse:线程中的异常;AWT-EventQueue-0“;java.lang.NullPointerException_Java_Eclipse_Nullpointerexception_Awt - Fatal编程技术网

eclipse:线程中的异常;AWT-EventQueue-0“;java.lang.NullPointerException

eclipse:线程中的异常;AWT-EventQueue-0“;java.lang.NullPointerException,java,eclipse,nullpointerexception,awt,Java,Eclipse,Nullpointerexception,Awt,(我是java新手,所以请不要把你的答案弄糊涂了!!!!:p) 我刚刚用eclipse创建了一个游戏,我真的很想做一个有趣的游戏!我看了一些帮助我创建这个的教程。问题是我在比赛中不能移动。我真的很感激你的帮助! 以下是我在游戏中尝试使用wasd移动时遇到的错误: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at StickFireBasic.KeyAdapt.keyRele

(我是java新手,所以请不要把你的答案弄糊涂了!!!!:p) 我刚刚用eclipse创建了一个游戏,我真的很想做一个有趣的游戏!我看了一些帮助我创建这个的教程。问题是我在比赛中不能移动。我真的很感激你的帮助! 以下是我在游戏中尝试使用wasd移动时遇到的错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at StickFireBasic.KeyAdapt.keyReleased(KeyAdapt.java:19)
    at java.awt.Component.processKeyEvent(Unknown Source)
    at javax.swing.JComponent.processKeyEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(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.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.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)
My class files are: Main, GameFrame, Entity, Player , KeyAdapt.
主要内容: 游戏框架: 实体: 玩家: KeyAdapt:
嗯,这在我看来是不对的:

Player p;

public KeyAdapt(Player player) {

}
你不应该在某个地方给
p
赋值吗?比如构造器?目前您完全忽略了构造函数参数

否则,它将始终具有空值-因此,当您在处理程序中取消引用它时,它将抛出
NullPointerException
。您还应该将其重命名为更具描述性,很可能重命名该类本身,并将其设置为私有和最终:

public class PlayerKeyAdapter extends KeyAdapter {
    private final Player player;

    public PlayerKeyAdapter(Player player) {
        this.player = player;
    }

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

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

现在,我在eclipse中播放器旁边的数字中出现了一系列错误。和私人决赛选手@user1546217:Doh,拼写错误已经纠正,但你应该自己找出问题所在。仔细阅读错误消息。在Player键适配器下仍然有一个错误,称空白字段可能未被初始化,也适用于KEACTION(播放器)的返回类型。我正在努力,但很抱歉我是新手java@user1546217:好的,我也为拼写错误感到抱歉-我一次做的事情太多了-但在做太多之前,确保您真正理解Java语言是值得的。我个人建议您在开始使用GUI之前编写控制台应用程序;这样做会有很多麻烦让学生学会犯错,少遵守一些奇怪的规则等。它让你从零开始学习语言和核心库,没有那么多的干扰。为了更快地获得更好的帮助,请发布一篇文章。
package StickFireBasic;

import java.awt.Graphics2D;

public class Entity {
    
    int x, y;
    
    public Entity(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public void update() {
        
    }

    public void draw(Graphics2D g2d) {
        
    }
}
package StickFireBasic;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;

public class Player extends Entity{
    
    int velX = 0, velY = 0;

    public Player(int x, int y) {
        super(x, y);
        
    }
    
    public void update() {
        y += velY;
        x += velX;
    }
    
    public void draw(Graphics2D g2d) {
        g2d.drawImage(getPlayerImg(), x, y, null);
    }
    
    public Image getPlayerImg() {
        
        
        ImageIcon ic = new ImageIcon("C:/img/stickguy.png/");
        return ic.getImage();
    }
    
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        
        if (key == KeyEvent.VK_W) {
            velY = -2;
        } else if (key == KeyEvent.VK_S) {
            velY = 2;
        } else if (key == KeyEvent.VK_A) {
            velX = -2;
        } else if (key == KeyEvent.VK_D) {
            velX = 2;
        }
        
    }
    
    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        
        if (key == KeyEvent.VK_W) {
            velY = 0;
        } else if (key == KeyEvent.VK_S) {
            velY = 0;
        } else if (key == KeyEvent.VK_A) {
            velX = 0;
        } else if (key == KeyEvent.VK_D) {
            velX = 0;
        }
        
    }

}
package StickFireBasic;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KeyAdapt  extends KeyAdapter {
    
    Player p;
    
    public KeyAdapt(Player player) {
        
    }
    
    public void keyPressed(KeyEvent e) {
        p.keyPressed(e);
    }
    
    public void keyReleased(KeyEvent e) {
        p.keyReleased(e);
    }

}
Player p;

public KeyAdapt(Player player) {

}
public class PlayerKeyAdapter extends KeyAdapter {
    private final Player player;

    public PlayerKeyAdapter(Player player) {
        this.player = player;
    }

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

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