Problem mit STATIC-Verständnis

  • Themenstarter Themenstarter gues22
  • Beginndatum Beginndatum
G

gues22

Gast
Hi 😉

ich hab eine klein Frage, worauf mir aber auch "Java ist auch eine Insel" und googeln nix sagt

Java:
public class SAR{
      
        public static boolean CONNECT = false; 
             
        
public Server() throws IOException{
	
	whilet();
        aftert();
}
 
public void whilet(){
	
	while(CONNECT == false){
	System.out.println("CONNECT: " + CONNECT);	
		
	}
}


Diese klasse SAR (nur notwendiger auszug) startet er main-methode, läuft durch den konstruktor und bleibt somit in der while()-methode hängen (endlosschleife)
sobald aber die statische variable CONNECT geändert wird, auf true, so ist die whilet() zuende und aftert() startet

aber: ich führe SAR aus (ausgabe lautet: false, false, false usw),
doch nun führe ich in einer anderen klasse

Java:
void starten(){
SAR.CONNECT=true;
System.out.println(Server.CONNECT + "= true?");	
}

ergbnis:
-ich starte SAR (false,false,false etc)
-starte nun starten()
-konsole teilt mir durch "true= true?" mit, dass CONNECT wirklich true ist

DOCH: SAR läuft immer noch weiter und sagt mir, dass "Connect = false"

wieso sar SAR, dass CONNECT false ist
aber die andere klasse behauptet, dass CONNECT true ist.
was läuft da schief?
 
Solange die endlos-Schleife laufend gehalten wird, ist es nicht möglich Werte innerhalb dieser Klasse zu ändern (ok schon möglich, jedoch nicht über den statischen Aufruf Class.Variable = true).
Das hat damit zu tun, dass der aktive Thread der Klasse ununterbrochen beschäftigt ist und keine Änderungen ermöglicht durch einen anderen Thread, würde man nur den Aufruf, mit dem setten vor der Schleife aufrufen, würde dies höchstwahrscheinlich noch die Änderungen übernehmen, falls vor dem start der endlos-Schleife noch der Wert gesetzt wird.

lg
 
ach so ist das..
aber es ist ja nur ein JVM bzw ein prozess...
aber wenn ich CONNECT vorher schon auf true setze, dann kommt ja gar keine endlosschleife zustande

aber wie kann ich das dann machn:

ich brauche 2 klassen (Im endeffekt sind es dann 2 runnable .jar -dateien sein)

ich starte die ein jar-datei per doppelklick
dann läuft eine endlosschleife oder sowas

und starte ich das zweite programm, also die 2. jar-datei, so soll die schleife im ersten programm abgebrochen werden...

geht das?
 
Nein, das geht so nicht. Dazu braucht du eine Kommunikationsverbindung zwischen verschiedenen Prozessen, z.B. per Sockets, RMI, o.ä.
 
ach so ist das..
aber es ist ja nur ein JVM bzw ein prozess...
aber wenn ich CONNECT vorher schon auf true setze, dann kommt ja gar keine endlosschleife zustande

aber wie kann ich das dann machn:

ich brauche 2 klassen (Im endeffekt sind es dann 2 runnable .jar -dateien sein)

ich starte die ein jar-datei per doppelklick
dann läuft eine endlosschleife oder sowas

und starte ich das zweite programm, also die 2. jar-datei, so soll die schleife im ersten programm abgebrochen werden...

geht das?

Sicher das du nicht eignetlich nen multithreading brauchst statt zwei prozessen?
 
hm okay aber wie haut das dann hin...?

kaetzacoatl? wieso gehts dann bei mir net?
Innerhalb einer Applikation und separaten Threads ginge das
Java:
	Test.connected = false;
		new Thread(new Runnable() {
			public void run() {
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Test.connected = true;
			}
		}).start();
		while(!connected)
			System.out.println("not connected");
		System.out.println("connected");
Du versuchst es aber scheinbar über verschiedene Applikationen - die teilen sich keine Variablen und müssen über andere Mittel miteinander kommunizieren.
 

Zurück
Oben