Event Handling MousePressed vs. Timer!

Milkaselnuss

Aktives Mitglied
Hallo,

ich habe ein Problem mit folgendem Code:

Java:
boolean mouseDown = false;

public KonstruktorEinerJFrameKlasse(){

        .....

        new java.util.Timer().schedule(new java.util.TimerTask(){
	        public void run(){
				
	               if (mouseDown){

			       .....

		       }
               }
	}, 10, 10);
}

@Override
public void mousePressed(MouseEvent arg0) {

	if (SwingUtilities.isLeftMouseButton(arg0)){

                 mouseDown = true;
        }
}

@Override
public void mouseReleased(MouseEvent arg0) {

	if (SwingUtilities.isLeftMouseButton(arg0)){
		mouseDown = false;
	}
}

[Der Code ist etwas vereinfacht]

Ich setze mouseDown auf true, sobald die Maus gedrückt wird, und beim loslassen setze ich den boolean wieder auf false.

Während das Programm an ist, habe ich immer noch einen Timer, der alle 10ms durchläuft. Dieser wird bereits im Konstruktor der Hauptklasse (JFrame) erstellt. Wenn die Maus gedrückt ist, soll etwas passieren.

Nun zum Problem: Sobald ich auf die Maustaste drücke, dauert es mehr als 10ms (bestimmt 20-25) bis die im Timer auszuführende Aktion das erste mal ausgeführt wird. Was passiert also in dieser großen Zeitspanne?
Das ändern des boolean kann nichz so lange dauern und der EventHandler sollte doch den Timer auch nicht beeinflussen.

Ich stehe hierbei vollkommen auf dem Schlauch und bin für jede Hilfe dankbar!

MlG, Milkaselnuss
 

Flown

Administrator
Mitarbeiter
Da deine Variable von mehreren Threads bearbeitet werden kann würde ich dir mal raten diese als volatile zu markieren.

Des Weiteren habe ich auch kleine Versuche gemacht und kann sagen, dass es sofort registriert wird sobald sich was ändert.

Wie hast du denn die Zeit gemessen?
 

Milkaselnuss

Aktives Mitglied
Da deine Variable von mehreren Threads bearbeitet werden kann würde ich dir mal raten diese als volatile zu markieren.

Des Weiteren habe ich auch kleine Versuche gemacht und kann sagen, dass es sofort registriert wird sobald sich was ändert.

Wie hast du denn die Zeit gemessen?

Ich muss zugeben, dass diese Zeit eher gefühlt ist. Während dem Timer wird eine Linie, dem Mauszeiger folgend gezeichnet. Diese Linie läuft super flüssig, allerdings erst nach ca. 20ms. (Am Anfang ist eine Lücke).

Der Vorschlag mit volatile hört sich sehr interessant an. Werd ich definitiv ausprobieren!
 
Zuletzt bearbeitet:

Milkaselnuss

Aktives Mitglied
Hier ein Bild von dem Fehler:

Anhang anzeigen 7653


volatile hat das Problem leider nicht gelöst.

Ich habe mir jetzt mal die genauen Zeiten zwischen den Timerdurchläufen angesehen. Die Abstände liegen genau im richtigen Bereich. Trotzdem kommt der folgende Effekt.

Irgendwas stimmt da doch nicht. :-(
 
Zuletzt bearbeitet:

Milkaselnuss

Aktives Mitglied
Hat sich inzwischen erledigt.

Habe knapp 2 Stunden gebraucht und schließlich den Fehler gefunden.
Selten dämlicher Fehler, hätte eigentlich viel früher draufkommen müssen.

Kein Problem zwischen MouseListener und Timer!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Frage zu MouseListener --> mousePressed() AWT, Swing, JavaFX & SWT 5
I JButton MousePressed AWT, Swing, JavaFX & SWT 2
M Wenn Mausgehalten wird MousePressed ansonsten MouseClicked? AWT, Swing, JavaFX & SWT 11
C MousePressed AWT, Swing, JavaFX & SWT 7
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
M 2D-Grafik timer bei Analoguhr AWT, Swing, JavaFX & SWT 2
A Timer AWT, Swing, JavaFX & SWT 1
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Timer in SwingWorker stoppen AWT, Swing, JavaFX & SWT 4
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
F Java Timer Bug? AWT, Swing, JavaFX & SWT 6
B Timer, TimerTask und Warten AWT, Swing, JavaFX & SWT 4
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
E Problem mit Timer und Swing AWT, Swing, JavaFX & SWT 8
N AWT Timer überschreiben? AWT, Swing, JavaFX & SWT 8
P Label rotieren mit Timer AWT, Swing, JavaFX & SWT 5
F Swing GUI und Model mit Timer AWT, Swing, JavaFX & SWT 13
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
J Nach Timer ausführen AWT, Swing, JavaFX & SWT 6
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
D Timer JFrame AWT, Swing, JavaFX & SWT 7
F Swing timer nimmt delay nicht an AWT, Swing, JavaFX & SWT 2
S Swing Timer, Countdown AWT, Swing, JavaFX & SWT 2
F Timer welches JPanel aktualisiert AWT, Swing, JavaFX & SWT 6
H Timer/Stoppuhr in MenuBar anzeigen AWT, Swing, JavaFX & SWT 4
D Applet Methode in Timer einbinden AWT, Swing, JavaFX & SWT 6
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
R Probleme mit Swing Timer AWT, Swing, JavaFX & SWT 6
C Timer Problem AWT, Swing, JavaFX & SWT 5
VfL_Freak Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen? AWT, Swing, JavaFX & SWT 6
H Swing Timer Probleme AWT, Swing, JavaFX & SWT 5
Burny91 Swing Mit Timer JLabel updaten AWT, Swing, JavaFX & SWT 2
P Game of Life - PaintComponent-Problem / Timer? AWT, Swing, JavaFX & SWT 8
B JLabel mittels Timer und setLocation verschieben AWT, Swing, JavaFX & SWT 3
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
C Timer erstellen? AWT, Swing, JavaFX & SWT 2
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
L Timer Swing GUI AWT, Swing, JavaFX & SWT 2
G Swing Timer stoppen AWT, Swing, JavaFX & SWT 4
B Swing-Timer AWT, Swing, JavaFX & SWT 4
D javax.swing.Timer bringt NullPointerException AWT, Swing, JavaFX & SWT 4
J Swing timer? AWT, Swing, JavaFX & SWT 2
C Timer, Darstellung einer Uhr AWT, Swing, JavaFX & SWT 4
Z javax.swing.Timer: wie stoppen??? AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben