Hi,
ich lerne gerade Threads und habe was teils programmiert teils aus einem Buch.
Erstmal zum Programm
In einer GUI gibt es einen Start und einen Stop Button. (Nur das wichtigste als Code, GUI ist funktionsfähig)
Die Klasse für den Thread
So, jetzt wie ich denke dass es abläuft( Wahrscheinlich ist das falsch )
Bei drücken des Start Buttons wird die Variable infoWorker die vom Typ GetInfo (also der Klasse) ist belegt mit der Methode
Diese Methode benutzt die Methoden-internen Variable info um die Klasse GetInfo() aufzurufen.
info wird dann zurückgegeben (per return) an den Aufrufer (infoWorker), also IST infoWorker dann info?
Im Konstruktor der Klasse GetInfo() wird gesagt, dass dieser Global definierte Thread tn nun ein neuer Thread ist mir Verweis auf diese Klasse. Danach wird er gestartet.
Da er auf diese Klasse angesetzt wurde, sucht er hier die run() Methode.
Da über den Konstruktor der neue Thread tn gestartet wurde, ist dieser mit info verknüpft. info wird an infoWorker zurückgegeben, also kann man per infoWorker den aktuellen Thread beenden.
Wenn ich nun zweimal auf den StartButton drücke, läuft das ganze zweimal ab, der zweite Thread heißt genauso und bekommt die gleichen Variablen wie der erste.
Also ist der erste erzeugte Thread nicht mehr ansprechbar, man kann ihn nicht mehr beenden?
Danke für eure Hilfe
ich lerne gerade Threads und habe was teils programmiert teils aus einem Buch.
Erstmal zum Programm
In einer GUI gibt es einen Start und einen Stop Button. (Nur das wichtigste als Code, GUI ist funktionsfähig)
Java:
public class GUIMain {
private GetInfo infoWorker;
JButton btnStart = new JButton("Start");
infoWorker = GetInfo.StartPointerInfo(); //Start
JButton btnStop = new JButton("Stop");
infoWorker.StopPointerInfo(); //Stop
Die Klasse für den Thread
Java:
public class GetInfo implements Runnable {
private final Thread tn;
private GetInfo() {
this.tn= new Thread(this);
this.tn.start();
}
public static GetInfo StartPointerInfo() {
GetInfo info = new GetInfo();
return info;
}
public void StopPointerInfo() {
tn.interrupt();
}
@Override
public void run() {
while (! tn.isInterrupted() ) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
tn.interrupt();
}
.
.
doSomething
}
}
So, jetzt wie ich denke dass es abläuft( Wahrscheinlich ist das falsch )
Bei drücken des Start Buttons wird die Variable infoWorker die vom Typ GetInfo (also der Klasse) ist belegt mit der Methode
Code:
StartPointerInfo()
Diese Methode benutzt die Methoden-internen Variable info um die Klasse GetInfo() aufzurufen.
info wird dann zurückgegeben (per return) an den Aufrufer (infoWorker), also IST infoWorker dann info?
Im Konstruktor der Klasse GetInfo() wird gesagt, dass dieser Global definierte Thread tn nun ein neuer Thread ist mir Verweis auf diese Klasse. Danach wird er gestartet.
Da er auf diese Klasse angesetzt wurde, sucht er hier die run() Methode.
Da über den Konstruktor der neue Thread tn gestartet wurde, ist dieser mit info verknüpft. info wird an infoWorker zurückgegeben, also kann man per infoWorker den aktuellen Thread beenden.
Wenn ich nun zweimal auf den StartButton drücke, läuft das ganze zweimal ab, der zweite Thread heißt genauso und bekommt die gleichen Variablen wie der erste.
Also ist der erste erzeugte Thread nicht mehr ansprechbar, man kann ihn nicht mehr beenden?
Danke für eure Hilfe