Keylistener zu langsam

dalco

Aktives Mitglied
hallo,

ich will auf einer canvas einen spielstein steuern, hoch/runter geht er alleine, ich kann ihn nur rechts/links steuern, geht mit keypressed gut, nur:

Java:
public void keyPressed(KeyEvent ke) {
	if (ke.getKeyCode()==77) {
    	    xpos=xpos+1;
            repaint();
       }
       else if (ke.getKeyCode()==66) {
          xpos=xpos-1;
          repaint();
       }
    }

problem ist das verzögern, lass ich meinen finger auf die taste für links, ruckt er einmal, dann kurze pause, dann flüssig weiter, wechsel ich nach rechts, wieder verzögerung erst danach flüssig....

für eine gute steuerung müsste es beidseitig aber sofort und unterbrechungsfrei laufen.

danke für eure ideen
gruss
dalco
 

ice-breaker

Top Contributor
Das ist jetzt nicht wirklich ein Gebiet indem mich perfekt auskenne, aber ich wenn mich recht entsinne sieht es doch so aus:

Das Painting findet in dem AWT-Event-Thread statt, genauso auch die Ausführung der Listener.
Wenn nun eine Taste gedrückt wird, dann wird in die AWT-Event-Queue der KeyPress hinterlegt und sobald die Queue die Stelle mit dem KeyPress erreicht, wird dein Listener ausgeführt, und du befiehlst dann Swing wiederum ein Repaint in die AWT-Event-Queue zu legen.

Also auf kurz oder lang ist es so langsam weil mit jedem Tastendruck andauernd neu gezeichnet werden muss, wenn das Repainten 50msec braucht, dann ist es unter optimalen Einflüssen schon alleine nur rein 20 mal pro Sekunde möglich zu repainten, da noch deutlich mehr in der AWT-Event-Queue getan wird, liegt der Wert natürlich deutlich unter den 20.
Dass du andauernd repaintest ist das Problem ;)
 

TX

Mitglied
Hmm, gute Frage, man könnte es vielleicht so in der Art machen...

Java:
public void keyPressed(KeyEvent eingabeKey) {
            int keyCode = eingabeKey.getKeyCode();
            if(keyCode == KeyEvent.VK_LEFT){
                if(modus == 0){
                    modus = 1;
                    t = new Thread(){
                        public void run() {
                            try {
                                while(true){
                                    xpos = xpos - 1;
                                    TimeUnit.MILLISECONDS.sleep(100);
                                    repaint();
                                }
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                //e.printStackTrace();
                            }
                        }
                    };
                    t.start();  
                }else if (modus == 1){
                    t.interrupt();
                    xpos = xpos - 1;
                    repaint();
                } 
            }
        }
 
G

Gelöschtes Mitglied 9001

Gast
"...it's not a bug, it's a feature!"
Wenn Du im Java-Editor einfach mal eine Taste gedrückt hältst, dürfte das Verhalten auch so sein: zunächst wird nur einmal reagiert und nach einer gewissen Wartezeit wird dann flott hintereinander wiederholt reagiert, solange die Taste gedrückt bleibt. Bei mir auf dem Mac heißt das in den Systemeinstellungen "Ansprechverzögerung" und läßt sich einstellen. Wie es unter Windows ist, kann ich gerade nicht sagen.
Als Lösungsvorschlag würde ich bei einem Keypressed-Event einen Thread starten, der die gewünschte Aktion wiederholt vollführt und bei einem Keyreleased-Event müßte dieser Thread dann wieder beendet werden. Dabei darf dieser Thread natürlich nicht erneut gestartet werden, wenn er ohnehin schon läuft.
 

jeppi

Mitglied
"...it's not a bug, it's a feature!"
Bei mir auf dem Mac heißt das in den Systemeinstellungen "Ansprechverzögerung" und läßt sich einstellen. Wie es unter Windows ist, kann ich gerade nicht sagen.

Offiziell "Anschlagverzögerung"

Bei Windows "Zeichenverzögerung" über die Systemsteuerung erreichbar
(XP: Tastatur/Zeichenverzögerung/Verzögerung) oder direkt über die Registry.

Zweck: Damit man nicht bei jedem Tastendruck denselben Buchstaben gleich mehrmals getippt hat.
 

Marco13

Top Contributor
AFAIR stand da eher drin, dass man bei keyPressed ein flag=true setzen sollte, und bei keyReleased ein flag=false. Im Hauptthread wird dann nur dieses Flag abgefragt. Aber bitte nicht bei jedem Tastendruck einen eigenen Thread starten :autsch:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
D KeyListener Java Basics - Anfänger-Themen 7
B Keylistener auf JSpinner reagiert nicht? Java Basics - Anfänger-Themen 3
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5
E brauche hilfe beim KeyListener Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben