如何使扫描仪接受恒定输入

时间:2014-07-27 16:07:13

标签: java

我对Java很陌生,想知道如何在我提供扫描仪的时候让扫描仪接受输入,而其他一切仍然有效。我试过像这样使用while循环

Scanner scanner = new Scanner(System.in);

while(scanner.hasNext()) {
    String next = scanner.next();
}

它现在一直接受输入,但没有其他工作。我试过谷歌搜索,但找不到任何有帮助我的东西。我知道我会被告知阅读Java文档,但我不知道应该在那里阅读。

基本上我想要做的是为我的应用程序提供一个简单的命令系统。我目前有这个

    Scanner scanner = new Scanner(System.in);
    String next = scanner.next();

    if (next.startsWith("--")) {
        String[] commandLine = next.split("--");
        String command = commandLine[1];

        if (command.equalsIgnoreCase("start")) {
            if (!running) {
                timer.scheduleAtFixedRate(new Listen(), 0, 5000);
                System.out.println("Task started.");
            } else {
                System.err.println("Task is already running!");
            }

        } else if (command.equalsIgnoreCase("end")) {
            if (running) {
                timer.cancel();
                System.out.println("Task stopped.");
            } else {
                System.err.println("Task is not running!");
            }

        } else if (command.equalsIgnoreCase("exit")) {
            if (running) {
                timer.cancel();
            }

            System.exit(0);
        }
    }

感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:0)

正如您所注意到的,当前线程在等待终端输入时无法执行任何其他操作。

此问题的解决方案是多线程,Concurrencythe Java Tutorials部分对此进行了描述。

  

...并发性解释了如何编写同时执行多个任务的应用程序...本课程介绍了平台的基本并发支持,并总结了java.util中的一些高级API。并发包。

答案 1 :(得分:0)

为了在执行其他任务的同时持续响应用户输入,您必须在单独的执行线程中监听用户输入。试试这个:

final Scanner scanner = new Scanner(System.in);
new Thread() {
    public void run() {
        while (true) {
            String next = scanner.next();
            //additional code here...
        }
    }
}.start();

答案 2 :(得分:0)

我不确定您的应用程序有多复杂,但我认为您应该使用生产者 - 消费者模式,查看this视频或this文章。

模式就是这样。

  • 有一个队列。
  • 有生产者线程可以获取任务并将其推送到队列中。在你的情况下,他们将读取输入并将它们放入队列
  • 有消费者线程从队列中读取并处理它们。在你的情况下,从队列中获取输入并相应地处理。

如果您只使用基本线程,则每次发出命令时都会创建新线程。虽然有这种模式,但只有两个线程(可能会有更多,但我不认为在你的情况下是必需的)等待他们没有任何事情要做。