Java KeyEventDispatcher不工作

Java KeyEventDispatcher不工作,java,exception,keyevent,Java,Exception,Keyevent,我想用键盘唤起计算机的某些反应。所以我写了一个KeyEventDispatcher,但是我得到了一个NullPointerException。我不能说异常发生在哪一行,因为编译器在任何情况下都引用同一行,不管代码是否存在。但该方法似乎被调用,因为它打印测试 以下是相关代码: import java.util.*; import java.awt.event.KeyEvent; import java.awt.event.*; import javax.swing.*; import java.a

我想用键盘唤起计算机的某些反应。所以我写了一个KeyEventDispatcher,但是我得到了一个NullPointerException。我不能说异常发生在哪一行,因为编译器在任何情况下都引用同一行,不管代码是否存在。但该方法似乎被调用,因为它打印测试

以下是相关代码:

import java.util.*;
import java.awt.event.KeyEvent;
import java.awt.event.*;
import javax.swing.*;
import java.awt.KeyboardFocusManager;
import java.awt.KeyEventDispatcher;

public class Game extends JFrame
{
  private JFrame frame;

  public Game()
  {
    frame = new JFrame();
    KeyEventDispatcher keyEventDispatcher = new InputKeyListener();
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyEventDispatcher);
    frame.setFocusable(true);
    setFocusTraversalKeysEnabled(false);
    setVisible(true);
}

private class InputKeyListener implements KeyEventDispatcher
{   
    private KeyEvent e;

    @Override 
    public boolean dispatchKeyEvent(KeyEvent e) {
        System.out.println(e);
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            System.out.println("test");                    
        }

        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            //do something                    
        }
        if (e.getKeyCode() == KeyEvent.VK_DOWN){

        }
        if (e.getKeyCode() == KeyEvent.VK_R){

        }

        return false;
    }
}
这是stacktrace:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Spiel$InputKeyListener.dispatchKeyEvent(Spiel.java:43)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1020)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

编辑:解决了-问题不是代码而是BlueJ,老师强迫我使用它。我不知道为什么,但它执行了一个旧代码,虽然我经常重新编译。我必须重新启动BlueJ以使其执行新代码。但感谢大家的帮助:

有趣的是,您的编译器引用了同一行,而不管上面有什么内容。你能发布你的stacktrace吗?还有,你能确认你确实在重新编译并运行重新编译的代码吗?刚刚试过你的代码,在我添加了一个main之后它就可以工作了。你必须提供更多的细节。@EngineerDollery:我在问题中添加了堆栈跟踪,我可以确认。@GabrielNegut:你是说主方法吗?我试着问一下为什么要创建一个实例变量private-KeyEvent e;这是没有用在任何地方。