Hallo, ich habe so meine Probleme mehrere Threads (MVC ähnlich) und das Observer-Pattern zu verheiraten.
Am Ende sollen es 3 Threads sein
Controller Thread
View Thread
Model Thread
Das aktuelle Problem ist, dass ich es nicht schaffe den View Threads mittels Observer update zu aktuallisieren. Im ControllerThread wird eine Tastatureingabe Abgefragt und in Abhängigkeit von der Eingabe soll die View entsprechend aktuallisiert werden.
Meine Main
ControllerKlasse
ViewKlasse
Am Ende sollen es 3 Threads sein
Controller Thread
View Thread
Model Thread
Das aktuelle Problem ist, dass ich es nicht schaffe den View Threads mittels Observer update zu aktuallisieren. Im ControllerThread wird eine Tastatureingabe Abgefragt und in Abhängigkeit von der Eingabe soll die View entsprechend aktuallisiert werden.
Meine Main
Java:
public class Main {
public static void main(String[] args) {
ControllerKlasse myController = new ControllerKlasse();
Thread s = new Thread(myController);
s.start();
}
}
ControllerKlasse
Java:
import java.util.Observer;
import java.util.Observable;
public class ControllerKlasse extends Observable implements Runnable{
ViewKlasse myView = new ViewKlasse();
// @Override
public void run(){
myView.start(); //View Thread starten
this.MenueController();
}
/**
* Methode zur Auswertung der Benutzereingabe
*/
public void MenueController(){
System.out.println("MenueController");
int menueNr = StdInput.readInt();
System.out.println("gelesen in MenueController: " + menueNr);
if (menueNr < 1 || menueNr > 6) { // if-Anweisung zur Pr�fung richtiger Programmpunkt
System.out.println("Auswahl: " + menueNr + " unbekannt!");
System.out.println("\nTreffen Sie eine neue Wahl");
} else {
switch (menueNr) {
case 1: //die Anderen Cases fehlen im Moment
System.out.println("Case 1");
setChanged();
//myView.notify();
notifyObservers(menueNr);
System.out.println("Case 1 durchlaufen");
break;
default:
}//switch
}//else
}
}
ViewKlasse
Java:
import java.util.Observer;
import java.util.Observable;
public class ViewKlasse extends Thread implements Observer{
@Override //wir Ueberschreiben die run() Methode von java.lang.Thread
public void run(){
this.Menue();
try{
while(true){
//läuft im Moment "ewig"
}
}catch (Exception e){};
}
/**
* Methode Menue() zeigt das textbasierte Auswahlmenue auf der Konsole an
*/
public void Menue(){
//ein Auswahlmenue wird angezeigt
}
public void update(Observable obs, Object o){ //nur Testausgaben
System.out.println("hallo ich bin die update");
int eingabe = (Integer)o;
System.out.println("Die Eingabe war: " +eingabe);
}
}