I am coding a simple client, but I always get a NullPointerException at:
while ((input = in.readLine()) != null) {
Here is my code:
public class ClientTest {
public static String server = "127.0.0.1";
public static int sport = 11111;
public static int cport = 11111;
private static String clientname="";
public static ExecutorService pool = Executors.newCachedThreadPool();
public static BufferedReader in = null;
public static PrintWriter out = null;
public static Socket socket = null;
public ClientTest(){
this.clientname="";
}
public static void main(String[] args) {
try {
socket = new Socket(server, sport);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch(IOException e) {
System.out.println("could not create connection:\n" + e);
try {
if(socket != null) socket.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
pool.execute(new Communicator());
}
public static class Communicator implements Runnable {
@Override
public void run() {
String input = "";
try {
while ((input = in.readLine()) != null) {//here i get the NPException
StringTokenizer tokenizer = new StringTokenizer(input);
tokenizer.nextToken();
if(input.startsWith("!open")) {
if(tokenizer.hasMoreTokens()) System.out.print(tokenizer.nextToken() + "> ");
else System.out.print("> ");
}
else if(input.startsWith("!exit")) {
System.out.print("Hallo hallo");
}
}
} catch(IOException e) {
System.out.println("An error as occurred while reading from server - \n" + e);
}
}
}
}
Why do I get the NullPointerException? I am still initializing the String input.
You would get a
NullPointerExceptionthere ifinis null… which it certainly could be. After all, if anything in the first part ofmainthrows an exception, you catch it, print it out… and then keep going! So ifsocket.getOutputStream()throws an exception, bothinandoutwill be null.Moral: catching an exception and just continuing as if nothing had happened is very rarely a good idea.