Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端与服务器建立连接后,为什么不显示JOptionPane?_Java_Sockets - Fatal编程技术网

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

Java 客户端与服务器建立连接后,为什么不显示JOptionPane?,java,sockets,Java,Sockets,启动服务器和客户端后,不会调用客户端类中的processInput方法。我试图使用调试器来查看是否可以找出导致问题的原因,但我无法找到。我在使用调试器时观察到,(is),ObjectInputStream实例没有被初始化。无论何时我在调试程序的这一行,我都无法继续调试过程 这是客户端的代码 ObjectInputStream is; ObjectOutputStream os; Socket socket; public ClientEmp(){ try { socke

启动服务器和客户端后,不会调用客户端类中的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实例的顺序