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:
Wie man sieht implementiert Client.java das Interface Runnable, also ist es ein Thread.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()); } } }
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.







Zitieren

Lesezeichen