null pointer exception in multi threading
Guys, I am getting null pointer exception in my server multi threading code.
The error occurs towards the end of the code where I close my server (server.close();)
I have intialized the server with a null value inside run(). But actually i want to close the server which i created inside main(). But I cant access it from outside main(). how do i solve this issue???
Code:
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class server implements Runnable {
Socket socket = null;
public server(Socket socket) {
this.socket = socket;
}
public static void main(String args[]) {
ServerSocket server = null;
Socket socket = null;
try {
//create socket
server = new ServerSocket(5000, 100);
System.out.println("Waiting for connection");
} catch (IOException ex) {
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}
while (true) {
try {
//accept nxt connection request
socket = server.accept();
System.out.println("Connection received from " + socket.getInetAddress().getHostName());
server myServer = new server(socket);
Thread t = new Thread(myServer);
Thread t1 = Thread.currentThread();
String name = t1.getName();
t.start();
System.out.println(" thread name is:" +name);
} catch (IOException ex) {
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void run() {
ObjectInputStream in = null;
ObjectOutputStream out = null;
boolean exit = false;
ServerSocket server = null;
try {
//get input and output streams
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
System.out.println("Connection successfull");
//reading input string
String inputStr = (String) in.readObject();
System.out.println("client> " + inputStr);
if (!inputStr.equals("exit")) {
if (inputStr.equals("vivek")) {
out.writeObject("Granted");
} else {
out.writeObject("Denied");
}
} else {
exit = true;
out.writeObject("exiting");
}
//close connection
in.close();
out.close();
socket.close();
} catch (IOException ex) {
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
e.printStackTrace();
} finally {
try {
server.close();
} catch (IOException ex) {
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}