정말 내 프로그램에 도움을 주시면 고맙겠습니다. 그것은 여러 클라이언트와 일종의 채팅 서버입니다. NullPointerException 스레드 실행 메서드
package com.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static int PORT;
private ServerSocket server;
private Socket socket;
public Server(int port) throws IOException {
PORT = port;
server = new ServerSocket(PORT);
System.out.println("server started");
try {
while (true) {
socket = server.accept();
try {
new ServeClient(socket);
} catch (IOException e) {
socket.close();
}
}
} finally {
server.close();
}
}
public static void main(String[] args) throws IOException {
int port = Integer.parseInt(args[0]);
Server server = new Server(port);
}
}
내가 서버를 시작하고 클라이언트를 만들 : 다음은 서버 코드입니다. 서버는 소켓 에서 연결 소켓을 수신하고 ServeClient 스레드를 작성합니다. 여기 ServeClient 코드입니다 : ServeClient는 "시도"라인 (33)가 처음으로 라인이
server started
socket Socket[addr=/127.0.0.1,port=51438,localport=8888]
Exception in thread "Thread-0" java.lang.NullPointerException
at com.server.ServeClient.run(ServeClient.java:33)
run() 메소드를 호출 할 때
package com.server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;
import com.gui.WindowManager;
public class ServeClient extends Thread {
private final Socket socket;
private BufferedReader in;
private PrintWriter out;
private String msg;
public static final String ENDSTRING = "END";
public static Vector clients = new Vector();
public ServeClient(final Socket socket) throws IOException {
this.socket = socket;
System.out.println("socket " + socket);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
start();
}
public void run() {
try {
clients.add(this);
while (true) {
msg = in.readLine();
if (msg == ENDSTRING)
break;
broadcast(msg);
}
System.out.println("closing...");
} catch (IOException e) {
System.err.println("IO EXCEPTION");
} finally {
try {
socket.close();
} catch (IOException e) {
System.err.println("SOCKET NOT CLOSED");
}
}
}
@SuppressWarnings("deprecation")
public void broadcast(String msg) {
synchronized (clients) {
Enumeration<ServeClient> e = clients.elements();
while (e.hasMoreElements()) {
ServeClient serveClient = e.nextElement();
try {
synchronized (serveClient.out) {
serveClient.out.println(msg);
}
} catch (Exception eee) {
serveClient.stop();
}
}
}
}
}
는 내가 뭘 얻을 것은 NullPointerException이있다 ServeClient 실행의 문() 메소드
스택 추적은 예외가 발생하는 행을 알려줍니다. ServeClient.java:33. 어느 선 이니? 또한 문자열을 ==와 비교하면 안됩니다. equals를 사용하십시오. –
코드가 내 컴퓨터에서 작동합니다. 나는 깨진 Java 설정이나 뭔가를 가지고 있다고 생각할 것입니다. – Dolda2000
임의의 생각 : 사용중인 포트가 무엇입니까? 그것을 바꿔보십시오. –