Ich habe 2 Threads. Zuerst läuft einer los. Irgendwann benötigt er eine bestimmte variable. Daher greife ich in dem 1 Thread auf eine andere KLasse zu. In dieser Klasse läuft auch ein Thread wo ich dann die Variable bekomme. Wie kann ich sie aber nun an den 1 Thread übergeben?
Als Beispiel
Code:
class 1 {
//Thread1
public void run() {
//nun brauch ich die Variable
class2 aufruf;
}
}
Code:
class 2 {
//Thread2
public void run() {
String name; //Variable und will sie nun an Thread 1 übergeben
}
}
Das kannst du machen, wenn du bereits die Klasse instantiiert hast, es also bereits ein Objekt gibt, dem du nachträglich die Eigenschaften änderst bzw. ausliest.
Wenn du dir einen Konstruktor schreibst, der ein Argument entgegen nimmt, kannst du diesen Arbeitsschritt sparen.
In class2 legst du nun einfach eine private Instanzvariable vom Typ class1 an und initialisierst sie im Konstruktor.
Code:
public class Class2 {
private Class1 c1;
...
public Class2(Class1 c1) {
this.c1 = c1;
}
...
//eine set()-Methode könnte so aussehen:
public void setClassValue(Class1 c1) {
this.c1 = c1;
}
}
hmm mir ist noch nicht so richtig klar wie ich dann in der Klasse 1 die Variable erhalte. Bis jetzt übergebe ich doch nur eine Instanz der Klasse 1 in die Klasse 2 (Konstruktor). Also ich arbeite zwar mit den Instanzen aber nicht mit der eigentlichen Variablen die ich brauche?! arghh
Ah ich glaube nun verstehe ich es. Kann es aber sein das du Klasse 1 und 2 vertauscht hast? Bei dir ist doch Class2 die Klasse wo ich die Variable hinhaben möchte und Class1 ist die Klasse wo ich sie herbekomme. oder?
Ja, gut aufgepasst.
Es wird quasi in Class1 ein Wert gesetzt und ausgelesen. Dieser Wert wird in Class2 verarbeitet.
Du könntest in Class1 noch alle möglichen Dinge mit dem Wert anstellen lassen, bvor du ihn ausliest.
Das heisst dann aber auch das wenn ich Klasse 2 zuerst aufrufen muss muss ich schon als Konstruktor die Klasse 1 übergeben obwohl im Thread noch gar nicht die Variable gefunden werden kann.
Vielleicht zum Besseren Verständniss.
Ich habe folgendes Projekt. Eine Thread Klasse fängt bei Start des Programms an zu laufen. Diese macht nichts anderes als ein Telefon zu überwachen ob jemand anruft. Wenn irgendmal jemand anruft erhalte ich eine Nummer. Die muss ich der anderen Klasse übergeben und diese sucht dann mit der Nummer in einer Datenbank nach den Namen (die zu übergebende Variable) des Anrufers und übergibt/soll dann den Namen wieder zurück an die erste Klasse übergeben die den Namen und die Nummer in eine Tabelle darstellt.
z.B. bei mir
Zuerst wird die Klasse 1 gestartet
Code:
CallListener poller = new CallListener(namen.getSelectedItem()); //ich übergebe hierbei den Namen des Telefonnutzers, so das in der Firma verschiedene Leute das Programm nutzen können und ihr Telefon überwacht wird
Das ist nun die Klasse (1) für die Überwachung des Telefons
Code:
public class CallListener extends Thread {
..
public void run() {
//hier wird nun immer gepollt ob einer Anruf kommt
*doing* Anruft kommt
int nummer = .... //erhalte Anrufernummer
// Nun müßte ich die Nummer an die KLasse 2 übergeben
String Name = ..//erhalte den Namen aus Klasse 2 zurück
tableModel.setCall(this, nummer,Name); //schreibe beide Werte in eine Tabelle
...
Meine Klasse 2
Code:
public class Notesnameemail implements Runnable
{
public Notesnameemail(String telNo) { //erhalte die Nummer
}
public void run() { //Suche mit der Nummer nach dem Namen und will den zurückgeben.
...
}
}