In Android Studio habe ich einen Thread in einer Methode wie folgt enthalten (siehe unten), weil ich möchte den Thread neu starten, wenn es [1] aufgerufen wird, (neu erstellen Gewinde anstatt Neustart)Android: Interrupt-Thread in einer Methode enthalten
public void callthread(){
final Thread myThread = new Thread(new Runnable()
{
@Override
public void run()
{
for (int x=0; x<750&&!Thread.interrupted(); x++) {
//using this and thread sleep for repeated timed code within a thread
try {
Thread.sleep(4);
runOnUiThread(new Runnable()
{
@Override
public void run() {
//some code
if (condition) {
myThread.interrupt();
}
}
});
} catch (InterruptedException e) {
}
}
}
});
Mein Problem ist, dass es mich nicht myThread.interrupt();
an der gewünschten Stelle in meinem Code verwenden lassen, mir einen Fehler geben sagen: „Variable‚myThread‘wurde möglicherweise nicht initialisiert“ und wird nicht kompiliert aus diesem Grund. Es funktioniert jedoch, wenn der gesamte Thread in der Klasse enthalten ist, aber ich habe keine Möglichkeit, es neu zu starten. Mit anderen Worten, Ich brauche eine Möglichkeit, den Thread zu unterbrechen, während er in einer Methode enthalten ist. [2]
akzeptierte Lösungen
[1]. Eine Lösung, bei der der Thread neu gestartet werden kann
[2]. Eine Lösung, bei der der Faden unterbrochen werden kann, während der Faden in einem Verfahren enthalten ist
PS: Wenn sein unklar, ich habe meinen Code oben für eine gute Lesbarkeit bearbeitet, aber ich habe nicht Dinge wie die for
Schleife oder die Thread.sleep
entfernt Ich nehme an, sie könnten Teil des Problems sein. Also, wenn Theres zu viele oder zu wenig von einer bestimmten geschweifte Klammer das ist dann nicht das Problem
EDIT: Gesuchter um und anscheinend kann nicht Neustart ein Thread
'unterbrochen' ist nutzlos. vor allem, wenn Sie es aus dem Thread heraus aufrufen. Nur 'zurück' aus dem Lauf und der Thread stoppt. Java lässt Sie 'myThread' hier nicht verwenden, weil es nicht weiß, dass der' run' erst aufgerufen wird, nachdem die Initialisierungsphase abgeschlossen ist und die Variable tatsächlich einen Wert hat. aber sowieso brauchst du es nicht. – njzk2
Verwenden Sie auch 'wait' +' notify' anstelle von 'sleep' + 'interrupt' – njzk2
' für (int x = 0; x <750; x ++) { versuchen { Thread.sleep (4); runOnUiThread (neu Runnable() { @Override public void run() { // vage Bildansicht x +1 if (true) { return; } } }); } ' vage Bild Ansicht bewegt sich nach wie vor richtig (es sei denn, ich benachrichtigen müssen + warten, bis es zu arbeiten, obwohl im nur Interrupt mit dem Thread zu beenden) in der Programmiersprache Java tun – Mazino