聊天服务器与telnet Java

时间:2015-12-26 15:02:50

标签: java multithreading telnet

我想做一个基于telnet的多线程ChatServer,我以为我得到了它但是在telnet中输入1条消息之后它会出现以下错误

  

"线程中的异常"线程0"显示java.lang.NullPointerException

     

在Server.sendAll(Server.java:20)

     

在ServerThreads.run(ServerThreads.java:33)"

我知道它导致问题的原因,但我不知道如何在我的代码中专门修复它。我认为所有其他的东西都运转良好。 这是我的ServerThread类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;


public class ServerThreads extends Thread {

    private String prefix;
    private Socket socket;
    PrintWriter pw;

    public ServerThreads(String prefix, Socket s){
        this.prefix = prefix;
        this.socket = s;
        this.start();
    }

    public void run(){

        try {
            PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Server.list.einfuegen(0, this);
            pw.println("Client verbunden mit: "+prefix);

            while(true){
                //System.out.println("User: "+ socket.getInetAddress() + " Nachricht: " + line);
                String line = br.readLine();
                Server.sendAll(line, prefix);
                pw.flush();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

这是我的服务器类

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class Server {
    static EinfachListe list = new EinfachListe();
    static int zaehler = 1;
    private int port;
    ServerSocket socket;

    public Server(int port) throws IOException{
        this.port = port;
        socket = new ServerSocket(port);
    }

    static public void sendAll(String s, String prefix){
        for(int a = 0; a<list.getAnzahl(); a++){
            ((ServerThreads) (list.get(a))).pw.println(s);
        }
    }

    public void starteServer(){
        System.out.println("Der Server wurde gestartet");

        while(true){
            try {
                Socket s = socket.accept();
                //ServerThreads user = new ServerThreads("User:Anzahl Nachrichten "+zaehler++, 1000, s);
                String client = "Client"+zaehler++;
                new ServerThreads(client, s);
                //user.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

我不认为错误出现在我的LinkedList中,但是如果你认为它我也可以在这里复制我的LinkedList的代码。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您的list.get(a)返回null或相应的ServerThread未运行 - 在这种情况下,其pw仍然为空,从而导致Exception。< / p>