为什么客户端与服务器建立连接后不显示 JOptionPane



启动服务器和客户端后,不会调用客户端类中的processInput方法。我尝试使用调试器查看是否可以找出导致问题的原因,但我无法找到。我在使用调试器时观察到的是(is(,ObjectInputStream实例未被初始化。每当我在调试器的这一行时,我都无法继续调试过程。

这是客户端的代码。

ObjectInputStream is;
ObjectOutputStream os;
Socket socket;
public ClientEmp(){
    try {
        socket = new Socket(InetAddress.getLocalHost(), 4200);
        is = new ObjectInputStream(socket.getInputStream());
        os = new ObjectOutputStream(socket.getOutputStream());
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
private void processInput(){
    String str = JOptionPane.showInputDialog("Enter your name: ");
    try {
        os.writeObject(str);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public static void main(String[] args) {
    System.out.println("Hello World!");
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            ClientEmp cli = new ClientEmp();
            cli.processInput();
        }
    });
}

这是服务器的代码。

private Socket socket;
private ServerSocket serverSocket;
private ObjectInputStream is;
private ObjectOutputStream os;
public ServerEmp() {
    try {
        serverSocket = new ServerSocket(4200);
        System.out.println("Server Started");
        while (true) {
            socket = serverSocket.accept();
            getStream();
            System.out.println("Connection made to the server");
            try {
                String str = (String) is.readObject();
                System.out.println(str);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
private void getStream(){
    try {
        is = new ObjectInputStream(socket.getInputStream());
        os = new ObjectOutputStream(socket.getOutputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void main(String args[]) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            new ServerEmp();
        }
    });
}

我想出了问题所在。问题在于 ObjectOutputStream 和 ObjectInputStream 实例在客户端和服务器上初始化的顺序。

最新更新