# java.lang.NullPointerException aber nur wenns im Thread läuf



## EnemyArea (31. Okt 2008)

Hallo ihr lieben,

ich wollte mich bisl mit java beschäftigen und zu meinem vb.net server ein kleines java applet schreiben.
leider hängts bei mir noch bei dem javascript aufrufen aus dem applet heraus....

getAppletContext().showDocument(new URL("javascript:alert('" + reply +"')"));

soll mir eigentlich ein alert fenster öffnen, wenn der socket was empfängt, klappt auch so super, nur irgendwie nicht wenn ich es in einem thread ausführe , denn dann bekomme ich immer eine java.lang.NullPointerException

hier ist mal der code:

Klasse Sockets, die Hauptklasse

```
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;

public class Sockets extends Applet {
	
	Socket MySocket = null;

	public void init()
	{
 		try {
			
			//Socket erzeugen, am Server anmelden und lauschen
			MySocket = new Socket("192.168.178.20", 843);
			System.out.println("Verbindung hergestellt");
			
			String loginName = getParameter("name");
			String passwort = getParameter("passwort");

			this.WriteToServer(loginName+";"+passwort);
			System.out.println("Login gesendet");
			
			System.out.println("Warte das Client was sendet!");
			ClientThread lt = new ClientThread(MySocket);
			
		}catch (Exception e){ 
			System.out.println(e);
		}
	}

	public void WriteToServer(String Message)
	{
		try {
			OutputStreamWriter ow = new OutputStreamWriter(MySocket.getOutputStream(),"utf8"); 
			BufferedWriter bw = new BufferedWriter(ow); 
			bw.write(Message);		
			bw.flush();	
		}catch (Exception e){ 
			System.out.println(e);
		}		
	}
	
}
```

Klasse ClientThread:

```
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;

class ClientThread extends Applet implements Runnable{
	
	Socket socket;
	
	ClientThread(Socket socket) {	
      this.socket = socket;
      Thread t = new Thread(this,"Lesen");
      t.start();
   }
   
   public void run(){    
   		try {
   			while(true){
	 			InputStreamReader is = new InputStreamReader(this.socket.getInputStream(),"utf8");
				BufferedReader br = new BufferedReader(is); 
				String reply = br.readLine();
				if(reply != null){
					System.out.println("Thread Lese vom Server: " + reply);
					getAppletContext().showDocument(new URL("javascript:alert('" + reply +"')")); // <- hier java.lang.NullPointerException
				}
  			}
		}catch (Exception e){ 
			System.out.println("Thread: " + e);
		}
	}
   
}
```

vllt kann mir ja jemand helfen


----------



## HoaX (31. Okt 2008)

ich tippe mal das getAppletContext() null liefert.

wieso erbt ClientThread von Applet? ClientThread selbst ist doch garkein Applet und wird auch nicht als solches gestartet, sondern Sockets. Da es nicht wirklich ein applet ist wird auch appletContext nicht initialisiert.

wenn du von ClientThread zugriff auf den AppletContext brauchst dann übergib eine referenz auf Sockets


----------



## Verjigorm (31. Okt 2008)

woher soll der Thread denn getAppletContext() haben?
übergibs dem Thread im Konstruktor


----------



## SlaterB (31. Okt 2008)

vielleicht wird die run-Methode ausgeführt, bevor das Applet richtig initalisiert ist,
schreib doch mal 
Thread.sleep(2000);
rein, warte also zu Beginn von run() 2 Sekunden,

ansonsten musst du alternativ das funktionierende Beispiel zeigen zum Vergleich

-----


wieso erben beide Klassen von Applet, sind die beide beim Client?
dann wirds wohl daran liegen, dass nur die Klasse Sockets ein richtig initialisiertes Applet ist,
die andere Klasse erbt zwar auch von Applet und hat theoretisch die Methode  getAppletContext() zur Verfügung, ist aber nirgendwo eingebunden,

Sockets  musst   getAppletContext() aufrufen und das dort verfügbare Objekt an ClientThread übergeben,
ClientThread am besten gar nicht von Applet erben lassen,

es kann nur ein Applet geben (wie bei Highlander)

(teils Vermutung)


----------



## EnemyArea (31. Okt 2008)

oh danke leude, ich bin aber auch sowas von doof.... na sicher klar ich muss ne ref vom applet mitgeben anstatt es zu erben.... es läuft  vielen dank!


----------

