2017-04-13 3 views
0

Nach dem Starten des Servers und des Clients wird die processInput-Methode, die sich innerhalb der Client-Klasse befindet, nicht aufgerufen. Ich habe versucht, den Debugger zu verwenden, um zu sehen, ob ich herausfinden könnte, was das Problem verursacht hat, aber das konnte ich nicht. Bei der Verwendung des Debuggers habe ich beobachtet, dass die ObjectInputStream-Instanz (is) nicht initialisiert wird. Immer wenn ich mit dem Debugger in dieser Zeile bin, kann ich mit dem Debugging-Prozess nicht weitermachen.Warum wird das JOptionPane nicht angezeigt, nachdem der Client eine Verbindung zum Server hergestellt hat?

Dies ist der Code für den Client.

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(); 
     } 
    }); 
} 

Dies ist der Code für den Server.

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(); 
     } 
    }); 
} 

Antwort

0

Ich erkannte das Problem. Das Problem lag in der Reihenfolge, in der die ObjectOutputStream-Instanz und die ObjectInputStream-Instanz sowohl auf dem Client als auch auf dem Server initialisiert wurden.

Verwandte Themen