Anfängerproblem bei der Verwendung von Threads

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 :thumbup:

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();
            }
        }
    }
}
 
Es ist egal, ob der Thread noch läuft oder schon fertig ist. Ein Thread darf immer nur einmal gestartet werden. Du musst also bei jedem Klick eine neue Thread-Instanz erstellen und dann diese starten.

Thread (Java Platform SE 6)

It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.
 
Ich habe meinen Code folgendermaßen abgeändert:
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();


    @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) {
                Thread meinThread = new Thread(neuerthread);
                meinThread.start();
                }
        });
    }
}
Jetzt klappt es :scared:
Vielen Dank für deine Hilfe :smile:

Ich kann leider noch kein "Danke" abgeben, weil man dazu 10 Beiträge geschrieben haben muss.
 
Zuletzt bearbeitet:

Ähnliche Themen

M
Antworten
3
Aufrufe
187
moin
M
D
Antworten
17
Aufrufe
427
datNeMo
D
M
  • MikelKatzengreis
Antworten
10
Aufrufe
241
swa00
swa00
Zurück
Oben Unten