2013-05-11 14 views
3

J'écris un programme serveur qui doit imprimer des informations, telles que les clients se connectant ou se déconnectant, à la console lors d'une demande d'entrée utilisateur via la classe java.util.Scanner. L'entrée de l'utilisateur serait une commande telle que "quitter".Imprimer sur la console lors de la saisie du scanner

Y at-il un moyen d'attendre la saisie de l'utilisateur pendant l'impression d'informations en utilisant System.out.println()? Si je ne peux pas faire cela avec Scanner et System.out.println() y at-il une alternative?

+3

Utilisez deux threads? – Keppil

+1

Cela a fonctionné parfaitement. Merci! – jakeprogrammer

Répondre

0

Vous devez séparer votre traitement de l'acceptation de nouvelles connexions.

Voici un trivial (et un peu artificiel) par exemple

private static final class Handler implements Runnable { 

    private final Socket socket; 

    public Handler(Socket socket) { 
     this.socket = socket; 
    } 

    @Override 
    public void run() { 
     //do stuff. 
    } 
} 

public static void main(String[] args) throws IOException { 
    final ServerSocket serverSocket = new ServerSocket(); 
    final ExecutorService handlerExecutor = Executors.newFixedThreadPool(4); 
    while (true) { 
     final Socket socket = serverSocket.accept(); 
     System.out.println("Got new connection, passing off to handler"); 
     handlerExecutor.execute(new Handler(socket)); 
    } 

} 

Ainsi, les principales Thread ne traite que d'accepter une connexion et le faire passer pour la handlerExecutor qui appelle la méthode run du Handler. Cela signifie que le serveur peut continuer à attendre de nouvelles connexions et à les consigner pendant que le travail se poursuit dans les connexions individuelles dans leur Handler affecté.

Questions connexes