将在不暂停的情况下循环监听用户输入的 Java 应用程序

标签 java multithreading loops input command-line-interface

为简单起见,我希望在终端中使用循环逻辑,在检查用户输入的同时不断处理信息,而无需等待用户输入。

伪:

loop 
    If user input
        See what they've entered
    Do logic loop

注意:我已经尝试使用带有 System.in 的扫描仪并尝试查看下一行是否为空。不幸的是,该实现仍然会导致应用程序暂停。

最佳答案

基于 camickr 的评论和以下 post ,你可以使用下面的算法:

     public class ScannerRunner implements Runnable {
         private Scanner sc;
         private ScannerRunner() {/* no instantiation without parameters*/}
         public ScannerRunner(Scanner sc) {
            this.sc = sc;
         }
         @Override
         public void run() {     
            System.out.println("Enter The Correct Number ! ");
            int question = sc.nextInt(); 

            while (question!=1){
               System.out.println("please try again ! ");
               question = sc.nextInt(); 
            }
            System.out.println("Success");
        }
     }

然后,在您的主线程中创建一个扫描器,然后使用上述 Runner 生成一个线程(使用您提供的扫描器构建),并让您的主线程监听扫描器上的输入。 Scanner API应该能帮到你。

关于将在不暂停的情况下循环监听用户输入的 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49709070/

相关文章:

JavaFX Canvas : Draw a shape exclusively within another shape

java - 意外的运行时错误 : Could not load main Class

Java - 在数据接收时向另一个线程触发事件

android - 我想让一个倒数计时器在 android 中连续循环 - 需要关于如何做的意见

Java逻辑问题

swift 中的 java.util.enumeration 等价物

java - Autowiring 构造函数和字段

Java Process.waitFor() 和 Readline 挂起

c++ - 使用boost::upgrade_lock和shared_lock实现读/写线程安全

c - 带有循环的 Swift 3.1 模式