# Sock will nicht richtig beenden



## NoQ (18. Apr 2004)

Hallo, ich hab da ein kleines Problem mit Sock. Ich kann einen Verbindung richtig aufbauen, auch senden und empfangen und er schließt den Sock auch. Aber dann kommt diese Fehlermeldung. Was läuft da nicht richtig?

java.lang.NullPointerException
	at ClientTest.destroy(ClientTest.java:142)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)


----------



## Roar (18. Apr 2004)

ne NullPointerException hat nix mit sockets oder netzwerkprogrammierung zu tun, du zeigst da auf ein objekt welches null ist. schau mal in die zeile 142 von ClientTest, dort wirst du den fehler finden.


----------



## NoQ (18. Apr 2004)

Die Zeile 142 zeigt auf

sock.close();

Deshalb dachte ich ja zuerst, dass das sock nicht richtig beendet.

Meine Frage wäre jetzt wie ich diesen Null-pointer verhindere.


----------



## Illuvatar (18. Apr 2004)

Dann ist sock == null.

Überprüf das mal, indem du in der Zeile davor
	
	
	
	





```
System.out.println (sock == null);
```
machst.


----------



## NoQ (18. Apr 2004)

Okay, ich habs mal getestet. Und es ist auf Null...doch woran liegt es, dass es auf null ist oder muss ich noch etwas hinzufügen um diesen Fehler zu umgehen?


```
//Programm beenden
		lb_STATUS.setText("Status: Disconnecting Server.");
		try
		{
			th.requestStop();
			th.yield();
		
			try 
			{
				Thread.sleep(1000);
			} 
			catch (InterruptedException e) 
			{
				
			}
			
			in.close(); 
			out.close();
			System.out.println (sock == null);
			sock.close();
```

Hier noch mal die deklarationen


```
Socket sock; 		
InputStream in; 	 	
OutputStream out;
 	
OutputThread th;
```


----------



## NoQ (18. Apr 2004)

Sorry hab das ende der vergessen


```
catch (IOException e) 
		{
			System.err.println(e.toString());
			System.exit(1);
		}	
	}
```


----------



## Illuvatar (18. Apr 2004)

Entweder wurde die Variable nie initialisiert (halte ich für unwarscheinlich) oder
irgendwo im Code davor steht sock = null oder
(was ich für am wahrscheinlichsten halte) die Variable sock ist eine globale Variable und du hast sie in der Methode aus Versehen erneut deklariert.

```
class Bsp
{
  Socket s;
  public Bsp()
  {
    s = new Socket(/*irgendwas*/);
    closeConnection();
  }
  public void closeConnection()
  {
    Socket s; //nicht das gleiche Objekt wie oben
    s.close(); //NullPointerException, müsste this.s.close(); heißen
  }
}
```
So ungefähr. Probier mal

```
System.out.println (this.sock == null); 
this.sock.close();
```

Ohne mehr Code fällt mir nicht mehr ein.


----------



## NoQ (18. Apr 2004)

Jupp, danke für die Hilfe. 

Ich habe es versehendlich erneut deklariert.


----------

