我如何 运行 一个循环,其中 java 每次循环时暂停,如果有用户输入,值将添加到列表的末尾?

How do I run a loop wherein java is paused each time the loop goes around and values are added to the end of a list if there is user input?

我不知道如何更简洁地命名这个问题。基本上,我想知道如何在每个循环调用 TimeUnit.SECONDS.sleep 方法时 运行 一个 for 循环,并在有用户输入时将值添加到该循环正在经历的列表的末尾。

相关代码如下:

Scanner input = new Scanner(System.in);
    for (int i = 0; i < printQueue.size(); i++)
    {
        System.out.println("Printing " + i + " of " + printQueue.size()
                + "\n" + printQueue.get(i).getJobTime()
                + " seconds remaining."
                + "\nPlease press \"Enter\" to submit a new print"
                + " job.");
        TimeUnit.SECONDS.sleep(printQueue.get(i).getJobTime());
        if (input.hasNextLine()) 
        {
            input.nextLine();
            int printTime = jobGen.nextInt(10);
            PrintJob job = new PrintJob();
            job.setJobNum(i);
            job.setJobTime(printTime);
            printQueue.add(job);
        }
    }
    System.out.println(
            "Printed " + printQueue.size() + " of " + printQueue.size());

}

其中 printQueue 是不同 PrintJobs 的链表,每个链表都有一个 jobNum,更重要的是一个 jobTime。如果用户在任何单个循环中按下回车键,则会自动生成一个新的 PrintJob 并添加到 printQueue.

的末尾

现在发生的事情是,程序只是 运行s 并且永远不会终止,除非我按下 enter 键。我知道 hasNextLinehasNext 可能会阻止扫描指定的项目,但我不知道如何实现这样的东西。

谢谢。

Scanner.hasNextLine() 块等待输入,直到一行可用或到达输入末尾。因此,您不能同步使用它来检查输入是否可用。正如@Abion47 所建议的那样,您应该将此输入处理移动到一个单独的线程中。