I didn't believe it but...

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