# Thread startet nicht



## Marcel_Handball (23. Feb 2007)

Hallo zusammen, 
ich habe nun schon mehrere Applets geschrieben, die Thread verwenden, jedoch hatte ich stets die run-Methode in der Hauptklasse stehen. 
Nun wollte ich eine separate Klasse für das Thread erstellen, da ich dies brauchen werde, wenn ich mal mehrere Thread gleichzeitig ausführen muss.

Vielleicht kann mir einer von euch sagen, warum der Thread nun nicht gestartet wird: 


```
import java.applet.*;
import java.awt.*;

public class zweithreads extends Applet
{   int y=0;
    malen zeichenfeld = new malen();

    
    public void init(){
        setBackground(Color.black);
        setLayout(null);
     
        zeichenfeld.setBackground(Color.white);
        zeichenfeld.setBounds(10,10,300,200);
        add(zeichenfeld);    
    }

    public class ersterthread implements Runnable{
        Thread lauf;

        void start(){
            if(lauf==null){lauf= new Thread(); lauf.start();}
        }
    
        public void run(){
            Thread thisThread = Thread.currentThread();
    
            while(lauf == thisThread){
                y++;
                zeichenfeld.repaint();
                try{lauf.sleep(10);}catch(InterruptedException e){}
                if(y==200){stop();}
            }
        }

        void stop(){lauf=null;}
    }


    public class malen extends Canvas{
       public void paint(Graphics g){
           g.setColor(Color.red);
           g.drawLine(10,y,200,y);
       }
    }

}
```

Schon im Voraus Danke für eure Hilfe!!
Marcel


----------



## Wildcard (23. Feb 2007)

Die Klasse wird doch gar nicht benutzt  ???:L


----------



## Marcel_Handball (23. Feb 2007)

Was muss ich denn verändern, sodass der Thread in der klasse aufgerufen wird, und in dem canvas zeichnet?


----------



## Wildcard (23. Feb 2007)

Als erstes bräuchtest du ein Objekt der Klasse auf dem du deine 'start' Methode aufrufen kannst.
Zweitens nützt dir das hier nichts:

```
if(lauf==null){lauf= new Thread(); lauf.start();}
```
Wenn der Thread irgendwas tun soll dann musst du ihm dein Runnable, also 'this' übergeben.
Alles in allem eine sehr seltsame Struktur  :bahnhof:


----------



## Marcel_Handball (23. Feb 2007)

Ich bin noch nicht so erfahren mit Thread, und da ich ja meine Programme auch recht "ordentlich" schreiben möchte, würd ich dich gerne mal fragen, wie man denn am besten einen Thread in eine eigene Klasse auslagert und aufruft.



> Alles in allem eine sehr seltsame Struktur bahnhof.gif



Worauf ich hinziele ist folgendes: Ich möchte mehrere Thread parallel laufen lassen, daher jeweils eine eigene Klasse.


----------



## Wildcard (23. Feb 2007)

Einfach eine Klasse die Runnable implementiert, und irgendwo new Thread(new MyClass).start() aufrufen.
Dein seltsamer vergleich mit currentThread ist mir etwas suspekt.
Warum machst du das?
Ist doch viel einfacher eine boolean Variable im Schleifenkopf zu prüfen.


----------

