Thread soll auf nicht static Methoden/variablen zugreifen

JoeBloggs

Mitglied
Hallo,

ich bin recht neu (im Geschäft) und versuche gerade etwas mehr von den Threads zu verstehen. In der Suchen Funktion habe ich leider nichts passendes gefunden.

ich arbeite an einem Projekt in dem ich in einer Klasse mit Threads mit einem Server kommuniziere. Das klappt wunderbar, doch jetzt kommt ein Problem hinzu. Sobald ich auf andere Methoden zugreifen möchte, die nicht innerhalb eines threads laufen, bzw. Variablen Werte übergeben möchte, verlangt Eclipse gleich dass diese static zu sein haben. Das scheidet aus verschiedenen Gründen jedoch aus.

Wie bekomme ich es hin dass meine Threads auch mit normalen Methoden arbeiten können ohne die static machen zu müssen.

z.B. der Server meldet mir ein Kommando(innerhalb eines threads), welches außerhalb des Threads verarbeitet werden soll, Thread wartet so lange und läuft dann weiter, d.h. er sendet ein kommando zurück an der Server.

Es geht mir hier nicht um wait() notify(), sondern einfach die Übergabe an einen NON-static Methode.

Besten Dank
Markus
 
Deine Schilderung ist zwar nicht so ausführlich, jedoch denke ich, ich weiß, was Du willst.

Von statischen Blöcken/Methoden aus kann man nur auf NICHT-statische Methoden zugreifen, wenn man auch eine Instanz der zugehörigen Klasse hat - soll heißen: Java muß wissen, in welcher Instanz der Klasse die Methode aufgerufen werden soll.

Die Lösung Deines Problems: Erzeuge Dir eine Instanz der Klasse, deren Methode Du aufrufen willst und rufe sie aus dem statischen Bereich aus auf:
Code:
meineInstanz.tueWas();
:)
 
Okay, das klappt.

Ich habe in meinem Client jetzt

Code:
 private void starteSpiel(){
 	  synchronized(Start.spielSync){
 	  //	Start.setSpielerID(spielerID);
 		  Start.spielerID = spielerID;
 		  System.out.println("Spieler ID Client : "+spielerID);
 		  Start.spielSync.notifyAll();
 	  }
   }

und in der Non-static Methode
Code:
 public class Start {
 	static Vector spielSync = new Vector();
 	Spiel spiel;
 	Spieler spieler1, spieler2;
 	static int spielerID = 0;    		    	//regelt wer anfängt
 	public Start(){
 		synchronized (spielSync){
 			Spieler spieler1, spieler2;
 			int z = 0;
 			String name1 = "Heribert";
 			String name2 = "Lars";
 
 ....

Mein problem war echt, dass ich die Methode aufgerufen habe bevor die Instanz erzeugt war. D.h. um die Instanz zu erzeugen habe ich auf Antwort von eben diesem Thread (Client) gewartet.

Klasse, danke!
Dann werde ich in der Richtung mal weiterarbeiten.
 
Zurück