I use ubuntu. The way ubuntu handles keyboard input is different from that of windows. In ubuntu, after a key pressed event is triggered, a key released event is triggered immediately after that, even if you do not release the key. These false key Released events are making it difficult for me to program games, especially programming the collision detection. No matter how perfect my code is, I am not able to solve the problem.
As a proof, if you just write a program which will output whether a key is pressed or release, you will see that the output in ubuntu will appear like this - keyPressed > keyReleased > keyPressed > keyReleased and so on even if you do not release the key. Whereas in windows - key Pressed > key Pressed > key Pressed> key Pressed and so on.
Do you know any way to deal with this?
Here is a simple code that will make my issue clear, if you run this on 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();
}
}