Deklarationsfrage?

JimmyJo22

Mitglied
Hallo erstmal zusammen,

mein erster Post und gleich die Warnung --> Ich hab keine Ahnung ;) zumindestens im Moment noch. Bin aber dabei...

Nun zu meiner Frage:

Ich habe eine Java App (in Netbeans) mit 2 Frames, frame1 und frame2.
In frame1 habe ich folgendes deklariert

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

IPAdress = jTextField1.getText();
portname1 = jTextField2.getText();
portname = Integer.valueOf( portname1 ).intValue();
Socket EibSock = new Socket(IPAdress,portname);
OutputStream out = EibSock.getOutputStream();
}

Meine Frage wäre nun wie kann ich in frame2 auf EibSock zugreifen um z.b. EibSock.write auszuführen.
Bzw. wo muss ich das deklarieren damit ich überall zugreifen kann.

Danke schon mal für die Antworten und ich bitte um Verständnis (Anfänger!!)

Mit freundlichen Grüßen
JimmyJo
 

Antoras

Top Contributor
Du musst die Variable als Klassenvariable deklarieren (dann ist sie überall zwischen den geschweiften Klammern der Klasse sichtbar):
Java:
public class Test {
	private Socket eibSock;
	...
	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
		...
		eibSock = new Socket(IPAdress,portname);
	}
}
Im übrigen schreibt man den Anfangsbuchstaben von Variablen klein. Und für Code gibt es hier im Forum Code-Tags. Verwende die bitte.
 

JimmyJo22

Mitglied
Oh Danke für die schnelle Antwort!
Ok das habe ich soweit verstanden nur habe ich ja das Problem das
es ja eine class frame1 und eine class frame2 gibt.
Aber keine die alles mit einschließt. Wenn ich das also oben in frame1 deklariere kann ich in der kompletten frame1
darauf zugreifen aber nicht in frame2.
Gibt es da was alles umgreifendes?
 

Antoras

Top Contributor
In diesem Fall hast du die Möglichkeit das Socket-Objekt auf public zu setzen:
Java:
public class Frame1 {
	public Socket eibSock;
	...
}

public class Frame2 {
	Frame1 f = new Frame1();
	f.eibSock.write("Hallo");
}
Das wäre aber schlechter Programmierstil. Besser wäre dafür spezielle Hilfsmethoden zu benutzten:
Java:
public class Frame1 {
	private Socket eibSock;
	...
	public void socketWrite(String s) {
		eibSock.write(s);
	}
}

public class Frame2 {
	private Frame1 f = new Frame1();
	private void anyMethod() {
		f.socketWrite("Hallo");
	}
}
Wobei ich dir eher empfehlen würde beide Frames auf eine Klasse abzubilden:
Java:
public class FrameClass {
	private Frame f1, f2;
	private Socket eibSock;
	...
	private void createFrame1() {
		f1 = new Frame();
		eibSock = new Socket(IPAdress,portname);
	}
	
	private void createFrame2() {
		f2 = new Frame();
		eibSock.write("Hallo");
	} 
	
	public FrameClass() {
		createFrame1();
		createFrame2();
	}
}
 
Zuletzt bearbeitet:

Oben