Java solange maustaste gedrückt?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

... weil du in deiner while-Schleife nichts aufrufst, was "test" auf false setzt


Huhngut 
Beitragsersteller
 09.04.2019, 17:41

ein lösungsvorschlag wäre hilfreich aber ich habe ja auch nicht expliziet danach gefragt trotzdem danke

0
verreisterNutzer  09.04.2019, 17:44
@Huhngut

Ist doch ein Lösungsvorschlag -- du musst den Aufruf der Funktion, die den "Zustand" der Variablen "test" auf false setzt, in der while-Schleife aufrufen

0
verreisterNutzer  09.04.2019, 17:53
@Huhngut

Ja, ist auch die bessere (und ausgefeiltere) Möglichkeit -- mein Vorschlag bezog sich auf die "von Hand"-Lösung, mit mehr Erfahrung benutzt man natürlich die bereitgestellten Möglichkeiten des Betriebssystems

0
Huhngut 
Beitragsersteller
 09.04.2019, 17:55

wenn ich den thread mit thread.stop(); stoppe kann ich ihn beim nächsten mausklick nicht mehr nutzen wie umgehe ich das

0

Der event, dass die Maustaste losgelassen wurde, wird nie aufgerufen, weil der message pump wegen der while Schleife nicht arbeitet.

Eine Lösung ist, im Down-Event ein runnable zu starten, das was tut, und es im up-Event zu beenden.


Huhngut 
Beitragsersteller
 09.04.2019, 17:40

Danke hat funktioniert

0
Huhngut 
Beitragsersteller
 09.04.2019, 17:55

wenn ich den thread mit thread.stop(); stoppe kann ich ihn beim nächsten mausklick nicht mehr nutzen wie umgehe ich das

0
ohwehohach  10.04.2019, 13:28
@Huhngut

Ein einmal beendeter Thread kann nicht neu gestartet werden. Außerdem: Beende NIEMALS einen Thread mit "Thread.stop()"! Du solltest die Schleife eines Runnable immer nur beenden, indem Du eine Variable abfragst.

Sprich:

while (running)
{
...
}

Und zum Stoppen:

running = false;

Also im Prinzip schon so, wie es in Deinem Code bereits war.

0
ohwehohach  10.04.2019, 13:33
@ohwehohach

Im Prinzip müsste in Deinem Down-Ereignis sowas stehen wie:

test = true;
new Runnable(){
        public void run(){
            while (test) { ... }
        }
}.start();

und im Up-Event:

test = false;
1

Sobald du in die Methode steuerung springst, kommst du nie mehr raus. Änderungen an dem Boolean "test" kannst du auch nicht mehr machen, da nach dem Aufruf nichts weiteres mehr passieren kann.
Um das zu umgehen muss die Methode in einem extra Thread aufgerufen werden, sodass du im Hauptthread weiterhin die Chance hast, den Wert von test auf false setzen zu können.

Woher ich das weiß:eigene Erfahrung – Ich habe selber lange im PC gearbeitet

Huhngut 
Beitragsersteller
 09.04.2019, 17:40

Danke hat funktioniert

0
Huhngut 
Beitragsersteller
 09.04.2019, 17:50

wenn ich den thread mit thread.stop(); stoppe kann ich ihn beim nächsten mausklick nicht mehr nutzen wie umgehe ich das

0
ZaoDaDong  09.04.2019, 18:04
@Huhngut

Entweder bei jedem Mausklick nach bedarf einen neuen Thread erzeugen, falls der alte gestopt ist oder den thread nie beenden und in intervallen regelmäßig die variable pruefen. Etwa alle 100 ms.

0

Hastebin speichert Pastes nur für ne kurze Zeit. Hier ein permanenter Link:

https://pastebin.com/raw/xcUsD62z


Huhngut 
Beitragsersteller
 09.04.2019, 18:08

Danke wofür brauche ich das?

0