Problem bei Outputstreamerzeugung in anderer Klasse als Socket

iChaos

Aktives Mitglied
Hi zusammen

Die Klasse ClientNetwork erzeugt ein Socket und verbindet sich mit dem Server. Anschliessend schickt der Server ein DefaultListModel, welches dann im Gui vom Client angezeigt wird - funktioniert einwandfrei! Damit das Gui von Server/Client getrennt ist(so lautet die Vorgabe), habe ich eine getMethode für das Socket erstellt, damit ich es in der nächsten Klasse verwenden kann.


Java:
public class ClientNetwork implements Runnable {

	private Socket clientSocket;
	
	private InputStream inputStream;
	private ObjectInputStream objectInputStream;
	private DefaultListModel listModelFiles;
	private JList listFiles;

	public ClientNetwork(JList listFiles,DefaultListModel listModelFiles) {
		
		this.listModelFiles = listModelFiles;
		this.listFiles = listFiles;

		new Thread(this).start();
	}

	public void run() {
		
		try {
			clientSocket = new Socket("localhost",4444);
			inputStream = clientSocket.getInputStream();
			objectInputStream = new ObjectInputStream(inputStream);
			listModelFiles = (DefaultListModel) objectInputStream.readObject();
			listFiles.setModel(listModelFiles);
			
		} catch (ClassNotFoundException cnfe) {
				cnfe.printStackTrace();
		} catch (UnknownHostException uhe) {
				uhe.printStackTrace();
		} catch (IOException ioe) {
				ioe.printStackTrace();
		}
	}

	public Socket getClientSocket() {
		return clientSocket;
	}
}

Der FileLoader wird aufgerufen, wenn ich einen Button vom ClientGui drücke - funktioniert ebenfalls einwandfrei. Sobald ich aber einen Outputstream erzeugen will, schiesst es mir einen Nullpointer um die Ohren. Das Socket und die Klassenvariabel clientNetwork wurden vorher mit Syso's und if's auf null geprüft und es sind beide nicht null... Weswegen ich keinen Plan habe, wieso der Outputstream null ist...

Java:
public class FileLoader implements Runnable {

	private JList listFiles;
	private DefaultListModel listModelFiles;
	private ClientNetwork clientNetwork;
	private Socket clientSocket;
	private OutputStream outputStream;
	private DataOutputStream dataOutputStream;

	public FileLoader(JList listFiles, DefaultListModel listModelFiles) {

		this.listFiles = listFiles;
		this.listModelFiles = listModelFiles;
		
		new Thread(this).start();
	}

	public void run() {
		
		clientNetwork = new ClientNetwork(listFiles, listModelFiles);
		clientSocket = clientNetwork.getClientSocket();
		
		try {
			outputStream = clientSocket.getOutputStream();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}

		try {
			dataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}
}

Wer kann mir helfen?
 
S

SlaterB

Gast
> Das Socket und die Klassenvariabel clientNetwork wurden vorher mit Syso's und if's auf null geprüft und es sind beide nicht null...

im ganzen Programm ist kein if vorhanden, wovon fantasierst du? ;)

> Zeile 20: clientNetwork = new ClientNetwork(listFiles, listModelFiles);
> Zeile 21: clientSocket = clientNetwork.getClientSocket();

in Zeile 20 wird nur ein Thread gestartet, bis der einen Socket zur Verfügung stellt, dauert es nebenläufig ca. 5 ms (ausgedacht)
du fragst aber direkt in der nächsten Zeile, nur 5 ns später, bereits den Socket ab, da ist der aber noch null

setze Thread.sleep(100); dazwischen, 100 ms warten, dann dürfte der Socket da sein,
sauberer wäre, vom Thread-run aus weiterzumachen oder notfalls eine Schleife mit sleep bis socket != null
 

iChaos

Aktives Mitglied
Die Syso's und if's habe ich rausgenommen!

Finde deinen Lösungsansatz gut, doch es liegt nicht an der Zeit. Habe beide Vorschläge probiert, sehe jetzt gerade dass das Socket null ist... o_O
 

iChaos

Aktives Mitglied
Habs nach näherem Anschauen herausgefunden(denk ich mal), es lag am Thread in der Network-Class, dort fehlte eine while-Schleife die den Thread am laufen hält, da er nach dem Versenden des ListModels zu Ende ist.

ist meine Erkenntnis richtig so?
 
S

SlaterB

Gast
dass die run-Methode beendet wird, sollte keine Auswirkung darauf haben, ob die clientSocket-Variable im ClientNetwork-Objekt null ist oder nicht, nein,
einmal gesetzt, bleibt die Variable != null genau bis sie auf null gesetzt wird, eine sonstige Magie gibt es nicht,

das ClientNetwork-Objekt an sich verschwindet irgendwann, wenn es von nirgendwo mehr referenziert wird,
solange aber FileLoader es kennt, bleibt es auch bestehen, auch in FileLoader wird keine Variable magisch auf null gesetzt

ein allgemein denkbares Problem: wenn in der run-Methode ein lokaler ObjectInputStream definiert wird (bei dir nicht)
und run() beendet ist, dann kann es dazu kommen, dass dieser nun undefinierte ObjectInputStream geschlossen wird,
was dann auch zum Ende des InputStream des Sockets führt,
der Socket kann also vielleicht kaputt gehen/ beendet werden, nicht aber null werden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
E Problem: netbeans 6.5 und webanwendung Netzwerkprogrammierung 6
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10
B UDP Problem Netzwerkprogrammierung 25

Ähnliche Java Themen

Neue Themen


Oben