Hi.
Ich hab das jetzt ausprobiert. Leider war das nicht die Lösung, die NullPointerException besteht weiterhin. Aber das hattest du ja schon vermutet.
Ich hab mir das jetzt mal genauer angeguckt: Die Exception tritt immer dann auf, wenn die Verbindung hergestellt wird, also der ClientSocket eine Anfrage sendet. Die Ausgabe lautet:
Exception in thread "Thread-2" java.lang.NullPointerException
at main.Client.<init>(Client.java:23)
at main.Server.run(Server.java:18)
at java.lang.Thread.run(Thread.java:595)
Die betreffenden Zeilen sind in Client.java:
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
Also die Initialisierung eines BufferedReader, der den InputStream des Sockets ausließt.
In Server.java:
c = new Client(sv.accept());
(siehe Oben)
und in java.lang.Thread:
public void run() {
if (target != null) {
target.run();
}
}
Letzeres finde ich recht seltsam?! Wenn ich das richtig verstehe gibt es also ein Problem beim starten des Threads? Ich hab hier jetzt mal den Code von Client.java hochgeladen:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Client
implements Runnable
{
private Socket s;
private Thread t;
private BufferedReader in;
private PrintStream out;
private int id;
public Client(Socket s)
{
try
{
s = this.s;
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintStream(s.getOutputStream());
String identety = in.readLine();;
id = Integer.parseInt(identety.substring(0,2));
start();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
public final int getID()
{
return id;
}
public void sendMessage(String msg)
{
out.print(msg);
}
private void start()
{
RSS.registerPlugin(getID(), this);
t = new Thread(this);
t.start();
}
private void end()
{
try
{
RSS.unregisterPlugin(id);
s.close();
t.join();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}
}
public void run()
{
try
{
while(s.isConnected() == true)
{
String input = in.readLine();
int tgid = Byte.parseByte(input.substring(0,2));
String msg = input.substring(2);
RSS.messagePlugin(tgid,msg,id);
}
if(s.isClosed() == true)
end();
else
run();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
Wie man sieht implementiert Client.java das Interface Runnable, also ist es ein Thread.
Könnte das Problem darin bestehen, das ich ein neues Client-Object anlege, es aber nicht als Thread starte?
Naja, ich hoff mal mir kann da jemand weiterhelfen.
Danke.
Gruß, Jan.
Lesezeichen