【发布时间】:2014-05-20 18:37:04
【问题描述】:
我使用 ubuntu。 ubuntu 处理键盘输入的方式与 windows 不同。在ubuntu中,按键按下事件触发后,会立即触发按键释放事件,即使你没有释放按键。这些假键释放事件使我难以编写游戏,尤其是编写碰撞检测。无论我的代码多么完美,我都无法解决问题。
作为一个证明,如果你只是编写一个程序来输出一个键是按下还是释放,你会看到 ubuntu 中的输出会是这样的 - keyPressed > keyReleased > keyPressed > keyReleased 等等,即使你不要释放钥匙。而在 windows - key Pressed > key Pressed > key Pressed> key Pressed 等等。
你知道解决这个问题的方法吗?
如果你在 ubuntu 上运行,这里有一个简单的代码可以让我的问题变得清晰:-
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Strange extends JPanel implements KeyListener{
public Strange(){
this.setPreferredSize(new Dimension(500, 500));
addKeyListener(this);
setFocusable(true);
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT)
System.out.println("left is pressed");
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT)
System.out.println("left is released");
}
@Override
public void keyTyped(KeyEvent e) {}
public static void main(String[] args){
new Strange();
}
}
【问题讨论】:
-
您使用的是哪种语言。你能显示一些代码吗?
-
我使用java。但是我发布的问题是一个低级问题,不依赖于任何编程语言。
-
@adnankamili 好的,我已经发布了一些代码来演示我的问题
-
我实际上使用 C++ 并且从未遇到过这个问题。看来你覆盖了错误的处理程序 keypress 通常相当于 keydown + keyup 你没有 keyup 和 keydown 事件。
-
@adnankamili 你用c ++说你没有遇到这个问题,怎么会?你用 ubuntu 吗?
标签: java linux ubuntu keylistener keyevent