When I implemenet keyListener the action of holding a key down appears to be implemented as keyPressed, keyReleased, keyPressed, keyReleased…
This causes states of my objects to be set when I don’t want them to… i.e. stop player ect. any Ideas??? I’m on win2k.
I thought linux was the only platform that suffered from that bug.
I get the expected behaviour in Win98 and XP (don’t have a 2K machine to hand)
KeyPressed (n times)
KeyTyped (n times)
KeyReleased (1 time)
import java.awt.*;
import java.awt.event.*;
public class KeyListenerTest extends Frame implements KeyListener
{
public KeyListenerTest()
{
addKeyListener(this);
setSize(50,50);
}
public void keyPressed(KeyEvent e)
{
System.out.println(e);
if(e.getKeyCode()==KeyEvent.VK_ESCAPE) dispose();
}
public void keyReleased(KeyEvent e)
{
System.out.println(e);
}
public void keyTyped(KeyEvent e)
{
System.out.println(e);
}
public static void main(String [] args)
{
new KeyListenerTest().show();
}
}
[quote]When I implemenet keyListener the action of holding a key down appears to be implemented as keyPressed, keyReleased, keyPressed, keyReleased…
This causes states of my objects to be set when I don’t want them to… i.e. stop player ect. any Ideas??? I’m on win2k.
[/quote]
Just a shot in the dark, but…could be your BIOS setup. I’ve always wondered how the hardware typematic-rate interacts with winXXX. ISTR there’s normally no problem, but yo may have strange BIOS and/or unusual setting for typematic rate
(it’s the BIOS option to simulate the action of holding a key down to make the letter appear lots of times; used to be necessary in the days before OS’s/apps that could do that automatically)
Abuse’s Test Results on my machine… I held the down arrow down once then quit.
DirectDraw surfaces constrained to use vram
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=40,keyText=Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD] on frame0
Well that is the correct behaviour Krypto ???
What is the problem?
Set a flag in keyPressed, clear the flag in keyReleased - it should work just fine.
problem is his sync object ( if u dont use a sync object u get in trouble )
so many mutex’s