Hallo zusammen,
ich bin noch ein ziemlicher noob was Java betrifft und erst seit einigen Wochen ernsthaft dabei etwas mit Java zu programmieren...komme von Delpi und PHP, die ja nicht so strikt sind
Mein Problem:
Ich habe mir einen kleinen Socket ChatServer zusammen gebastelt, der auch wunderbar funktioniert, läuft mit Threads, Clientpool,mehreren Räumen usw. Das problem ist nur, wenn sich ein Client ausklinkt, bekomme ich eine NullPointerException...allerdings nur in der Konsole, beim Client wird nichts ausgegeben, der Server läuft auch normal weiter, ohne Probleme. Theoretisch könnte ich das Problem also auch einfach ignorieren...ist aber wohl nicht die feine Art Hier mal mein Code:
Der genaue Fehler:
Also,was ein NullPointerException ist weiß ich, aber ich werde da nicht schlau draus, wie das zustande kommt...ich dachte ich hätte alles abgefangen...Die Zeile 116, in der der Fehler beginnt...dieWhile-Schleife, bringt mich da auch nicht weiter.
Wäre nett, wenn mir hier mal jemand helfen könnte...Ich versuche da jetzt schon seit Tagen schlau draus zu werden...aber ich tendiere eher zur anderen Richtung
Gruss
luzze
ich bin noch ein ziemlicher noob was Java betrifft und erst seit einigen Wochen ernsthaft dabei etwas mit Java zu programmieren...komme von Delpi und PHP, die ja nicht so strikt sind
Mein Problem:
Ich habe mir einen kleinen Socket ChatServer zusammen gebastelt, der auch wunderbar funktioniert, läuft mit Threads, Clientpool,mehreren Räumen usw. Das problem ist nur, wenn sich ein Client ausklinkt, bekomme ich eine NullPointerException...allerdings nur in der Konsole, beim Client wird nichts ausgegeben, der Server läuft auch normal weiter, ohne Probleme. Theoretisch könnte ich das Problem also auch einfach ignorieren...ist aber wohl nicht die feine Art Hier mal mein Code:
Java:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Vector;
public class ChatServer {
// Anfang Attribute
public static final int DEFAULT_PORT = 9800;
public static final int MAX_CLIENTS = 100;
public static final String SERVER_VERSION = "1.0";
// Ende Attribute
// Anfang Methoden
public static void main(String[] args) {
int port = DEFAULT_PORT;
ServerSocket serverSocket = null;
Socket socket = null;
try {
if(args.length > 0)
port = Integer.parseInt(args[0]);
System.out.println("\n[CHATSERVER v"+SERVER_VERSION+"]");
System.out.println("Copyright Grandlose.de, all rights reserved\n");
System.out.println("\nMaximum Clients: "+MAX_CLIENTS);
System.out.println("running Chatserver on Port "+port+" successfull...");
System.out.println("listen for new Clients...");
} catch(NumberFormatException nfe) {
System.err.println("Usage: java ChatServer [port]");
System.err.println("Where options include:");
System.err.println("\tport the port on which to listen.");
System.exit(0);
}
try {
serverSocket = new ServerSocket(port);
while(true) {
socket = serverSocket.accept();
ChatServerHandler handler = new ChatServerHandler(socket);
handler.start();
}
} catch(IOException ioe) {
ioe.printStackTrace();
} finally {
try {
serverSocket.close();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
// Ende Methoden
}
class ChatServerHandler extends Thread {
// Anfang Attribute1
static final String SERVER_VERSION = "1.0";
static final int MAX_CLIENTS = 10000;
static Vector<ChatServerHandler> handlers = new Vector<ChatServerHandler>( MAX_CLIENTS );
private boolean registered = false;
private String username;
private String ucolor;
private String room;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private String login;
// Ende Attribute1
public ChatServerHandler(Socket socket) throws IOException {
this.socket = socket;
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()));
}
// Anfang Methoden1
public void run() {
String line;
String message;
synchronized(handlers) {
handlers.addElement(this);
// add() not found in Vector class
}
try {
if (!registered){
login = in.readLine();
String[] splittArray = login.split(">>");
username=splittArray[0];
room=splittArray[1];
ucolor=splittArray[2];
out.println("<b>Willkommen beim Chatserver</b>");
out.flush();
registered=true;
for(int i = 0; i < handlers.size(); i++) {
synchronized(handlers) {
ChatServerHandler handler =
(ChatServerHandler)handlers.elementAt(i);
if (handler.room.equals(room)){
handler.out.println("<i>***** "+username+" betritt den Raum *****</i>");
handler.out.flush();
}
}
}
}
while(!(line = in.readLine()).equalsIgnoreCase("/quit")) { //<--Dies ist die misteriöse Zeile 116
String[] splittArray2 = line.split(">>");
message=splittArray2[0];
room=splittArray2[1];
ucolor=splittArray2[2];
for(int i = 0; i < handlers.size(); i++) {
synchronized(handlers) {
ChatServerHandler handler =
(ChatServerHandler)handlers.elementAt(i);
if (handler.room.equals(room)){
handler.out.println("<font color=\"#"+ucolor+"\"><b>"+username+":</b> "+message+"</font>");
handler.out.flush();
}
}
}
}
} catch(IOException ioe) {
ioe.printStackTrace();
} finally {
try {
in.close();
out.close();
socket.close();
} catch(IOException ioe) {
} finally {
synchronized(handlers) {
handlers.removeElement(this);
}
}
}
}
// Ende Methoden1
}
Der genaue Fehler:
Code:
Exception in thread "Thread-Nummer" java.lang.NullPointerException at ChatServerHandler.run<ChatServer.java:116>
Also,was ein NullPointerException ist weiß ich, aber ich werde da nicht schlau draus, wie das zustande kommt...ich dachte ich hätte alles abgefangen...Die Zeile 116, in der der Fehler beginnt...dieWhile-Schleife, bringt mich da auch nicht weiter.
Wäre nett, wenn mir hier mal jemand helfen könnte...Ich versuche da jetzt schon seit Tagen schlau draus zu werden...aber ich tendiere eher zur anderen Richtung
Gruss
luzze