0

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)

0 Answers0