I
IngoNoehr
Neues Mitglied
- 0
Hallo,
ich versuche gerade eine einfache App zu schreiben, in der durch das Klicken eines Buttons ein neuer Thread gestartet wird, der bis drei zählt (nur zu Testzwecken, soll später noch was sinnvolles machen).
Wenn ich allerdings den Button erneut drücke, nachdem der Thread fertig gezählt hat, stürzt die App mit der Meldung
java.lang.IllegalThreadStateException: Thread already started.
ab.
Ich verstehe das so, dass der alte Thread noch läuft.
Ich dachte allerdings ein Thread "stirbt" sobald er seine Aufgabe abgearbeitet hat.
Wäre super, wenn mir jemand erklären könnte, was ich falsch gemacht habe
Hier mein Code:
ich versuche gerade eine einfache App zu schreiben, in der durch das Klicken eines Buttons ein neuer Thread gestartet wird, der bis drei zählt (nur zu Testzwecken, soll später noch was sinnvolles machen).
Wenn ich allerdings den Button erneut drücke, nachdem der Thread fertig gezählt hat, stürzt die App mit der Meldung
java.lang.IllegalThreadStateException: Thread already started.
ab.
Ich verstehe das so, dass der alte Thread noch läuft.
Ich dachte allerdings ein Thread "stirbt" sobald er seine Aufgabe abgearbeitet hat.
Wäre super, wenn mir jemand erklären könnte, was ich falsch gemacht habe
Hier mein Code:
Code:
package com.example.thread_test;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
Runnable neuerthread = new NeuerThread();
Thread meinThread = new Thread(neuerthread);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!meinThread.isAlive())
meinThread.start();
}
});
}
}
package com.example.thread_test;
import android.util.Log;
public class NeuerThread implements Runnable {
private final String TAG = NeuerThread.class.getSimpleName();
@Override
public void run() {
for(int i=0; i<5; i++)
{
Log.d(TAG, Integer.toString(i));
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}