The variable in question is assigned a value in the run() method, the one which is called by the Thread when you start it. However it's clear from your stack trace that you never start any threads, since the run() method isn't in the stack trace.
Look, you have way too much code now to be debugging things which you should have done at the very beginning. So put that code aside and start again. Write a simple server which does nothing but accept connection requests and start threads to handle them. A plain old echo server would be good enough. Then to
test that you would need one server and two clients, to make sure that your server can actually handle more than one client.
Once you've got that working, then you can start putting back the code you've written so far. But when you do that, remember that it's the code in the thread you spawned which should be doing all of the communication with its client. You should probably put this code in a separate class, first of all because it's the right thing to do and second of all because then you won't be tempted to mix up request-accepting code with communication-handling code.