I'm trying to build a Server/Multiple clients chat app in Java that can handle muliple clients and build connection between them. I'm facing this problem whenever I run the app on my terminal. After entering the name of the client (whether it's 1 client or multiple) , the client terminal gives me an error but in server side everything works fine and says that new client is connected.
This my client.java
:
public class Client {
private Socket socket;
private BufferedWriter bufferedWriter;
private BufferedReader bufferedReader;
public String username;
public Client(Socket socket, String username) {
try {
this.socket = socket;
this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
closeEverything(socket, bufferedReader,bufferedWriter);
//TODO: handle exception
}
}
public void sendMessage(){
try {
bufferedWriter.write(username);
bufferedWriter.newLine();
bufferedWriter.flush();
Scanner scanner = new Scanner(System.in);
while(socket.isConnected()){
String messagetoSend = scanner.nextLine();
bufferedWriter.write(username+":"+messagetoSend);
bufferedWriter.newLine();
bufferedWriter.flush();
}
}catch (IOException e){
closeEverything(socket, bufferedReader,bufferedWriter);
}
}
public void listenForMessage(){
new Thread(new Runnable(){
@Override
public void run(){
String messageFromGroupe;
while(socket.isConnected()){
try {
messageFromGroupe = bufferedReader.readLine();
} catch (IOException e) {
closeEverything(socket, bufferedReader,bufferedWriter);
}
}
}
}).start();
}
public void closeEverything(Socket socket, BufferedReader bufferedReader,BufferedWriter bufferedWriter){
try{
if(bufferedReader != null){
bufferedReader.close();
}
if(bufferedWriter!=null){
bufferedWriter.close();
}
if(socket != null){
socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) throws UnknownHostException, IOException {
Scanner scanner = new Scanner(System.in);
System.out.println("Votre Nom :");
String username = scanner.next();
Socket socket = new Socket("localhost",1234);
Client client = new Client(socket, username);
client.listenForMessage();
client.sendMessage();
}
}
and the error i'm getting just after entering my username (VotreNom):
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at java.base/java.io.Writer.write(Writer.java:249)
at Client.sendMessage(Client.java:31)
at Client.main(Client.java:86)