【问题标题】:Chat Server with telnet Java [duplicate]带有 telnet Java 的聊天服务器 [重复]
【发布时间】:2016-04-01 01:28:37
【问题描述】:

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

“线程“Thread-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 的代码。感谢您的帮助!

【问题讨论】:

    标签: java multithreading telnet


    【解决方案1】:

    您的list.get(a) 返回null 或相应的ServerThread 未运行 - 在这种情况下,它的pw 仍然为空,导致您的Exception

    【讨论】:

    • 首先感谢您的帮助。你知道我该如何解决吗?
    • 请分享你的主要()
    • import java.io.IOException; public class Start { public static void main(String[] args) throws IOException { new Server(10000).starteServer(); } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2021-07-23
    • 2015-09-25
    • 2016-05-29
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多