Java KeyListener和KeyBinding问题

Java KeyListener和KeyBinding问题,java,swing,keylistener,Java,Swing,Keylistener,我最近做了一个坦克游戏,但我遇到了一个严重的问题。对于键盘输入,我使用了KeyListener,但在播放过程中,突然,KeyListener没有响应。钥匙坏了。我在互联网上寻找这个问题,我发现很多答案都说我应该使用键绑定。我这样做了,但问题又出现了。我该怎么办 这只是KeyBinding的一小段代码 public Action redTankBackwardReleased = new AbstractAction("action") { private static final lon

我最近做了一个坦克游戏,但我遇到了一个严重的问题。对于键盘输入,我使用了KeyListener,但在播放过程中,突然,KeyListener没有响应。钥匙坏了。我在互联网上寻找这个问题,我发现很多答案都说我应该使用键绑定。我这样做了,但问题又出现了。我该怎么办

这只是KeyBinding的一小段代码

public Action redTankBackwardReleased = new AbstractAction("action") {
    private static final long serialVersionUID = 1L;
    public void actionPerformed(ActionEvent e) {
        Game.redTank.xSpeed = 0;
        Game.redTank.ySpeed = 0;
    }
};

panel.getInputMap().put(KeyStroke.getKeyStroke("released DOWN"), "8");
panel.getActionMap().put("8", redTankBackwardReleased);

一切都很完美,但几秒钟或一分钟后,按键停止响应。。。我不明白。

您使用了错误的输入映射。您应该使用与int常量
JComponent.WHEN_IN_FOCUSED_窗口
关联的元素。应该是这样的

KeyStroke releasedDown = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, true);
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inputMap = panel.getInputMap(condition);
ActionMap actionMap = panel.getActionMap(); // there's only one ActionMap

// then use as you normally would
inputMap.put(....);
actionMap.put(...);

如果这是一个Swing GUI,那么键绑定应该可以工作,如果不能工作,那么代码中肯定有一个我们不知道的bug。如果您需要在这里或任何网站上帮助解决此问题,您将希望发布相关代码。最好不要发布整个程序或小片段,而是发布一个非常小的可编译和可运行的程序来演示您的问题,a。没有代码,我们就无能为力。我能给出的最佳建议是:组件只有在有焦点的情况下才接收
KeyEvent
s,所以只需使用
FocusListener
来确定它何时失去焦点。除此之外,没有代码我们也无能为力。@Paul:如果他使用的是键绑定,那么如果他使用的是正确的InputMap,那么焦点不应该是一个问题,但同样,我们不知道他在没有代码的情况下使用的是哪一个InputMap。@HovercraftFullOfEels好吧,这个建议是关于
KeyListener
-部分的(应该说得很清楚)。但最终,如果没有任何代码,这一切都是毫无意义的。我马上就在这里发布代码。如果这不能解决你的问题,那么,正如我对你的问题帖子的评论所指出的,一个有效的——请查看链接。在这段代码中,我应该在哪里实现在按下键时运行的代码?@Erninger:当然是在进入动作图的动作中。你已经看过键绑定教程了吗?如果没有,请按照此处的详细说明执行: