Java solange maustaste gedrückt?
Hallo ich möchte eine Aktion solange meine linke Maustaste gedrückt ist ausführen und was eignet sich da mehr als eine while schleife allerdings kam ich zu einer Endlosschleife wieso
4 Antworten
... weil du in deiner while-Schleife nichts aufrufst, was "test" auf false setzt
wenn ich den thread mit thread.stop(); stoppe kann ich ihn beim nächsten mausklick nicht mehr nutzen wie umgehe ich das
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
gute idee jetzt habe ich es über threats gelöst
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
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.
wenn ich den thread mit thread.stop(); stoppe kann ich ihn beim nächsten mausklick nicht mehr nutzen wie umgehe ich das
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.
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;
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.
wenn ich den thread mit thread.stop(); stoppe kann ich ihn beim nächsten mausklick nicht mehr nutzen wie umgehe ich das
Hastebin speichert Pastes nur für ne kurze Zeit. Hier ein permanenter Link:
ein lösungsvorschlag wäre hilfreich aber ich habe ja auch nicht expliziet danach gefragt trotzdem danke