从Scanner获取用户输入时打印到控制台

时间:2013-05-11 13:32:27

标签: java io console java.util.scanner

我正在编写一个服务器程序,需要在通过java.util.Scanner类请求用户输入时将信息(例如客户端连接或断开连接)打印到控制台。用户输入将是诸如“退出”之类的命令。

有没有办法在使用System.out.println()打印信息的同时等待用户输入?如果我无法使用Scanner执行此操作,System.out.println()还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

您需要将处理与接受新连接分开。

这是一个微不足道(并且有点人为)的例子

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

}

因此,主Thread仅处理接受连接并将其传递给调用handlerExecutor的{​​{1}}方法的run。这意味着服务器可以继续等待新连接并在其分配的Handler中的各个连接中继续工作时记录它们。