我想做一个基于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的代码。谢谢你的帮助!
答案 0 :(得分:0)
您的list.get(a)
返回null
或相应的ServerThread
未运行 - 在这种情况下,其pw
仍然为空,从而导致Exception
。< / p>