【问题标题】:Java Scanner break waiting for input [duplicate]Java扫描程序中断等待输入[重复]
【发布时间】:2023-11-01 14:25:01
【问题描述】:

如何在 Java 中中断等待输入?

        Scanner s = new Scanner() ;
        s.nextInt();
        //here break without input

我想创建一个 while 循环,您可以在其中输入 5 分钟的内容。 5分钟后循环应该被打破。但是当时间结束时,循环不会再次执行,但扫描仪仍在等待输入并进入。

我想退出等待输入,我不是说打破while循环。

【问题讨论】:

标签: java java.util.scanner break


【解决方案1】:

如果我正确理解你的问题,这就是你想要的:

import java.util.Scanner;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Testes {
    public static void main(String[] args) throws Exception {
        try {
            while (true) {
                System.out.println("Insert int here:");
                Scanner s = new Scanner(System.in);

                FutureTask<Integer> task = new FutureTask<>(() -> {
                    return s.nextInt();
                });

                Thread thread = new Thread(task);
                thread.setDaemon(true);
                thread.start();
                Integer nextInt = task.get(5, TimeUnit.MINUTES);

                System.out.println("Next int read: " + nextInt + "\n----------------");
            }
        } catch (TimeoutException interruptedException) {
            System.out.println("Too slow, i'm going home");
            System.exit(0);
        }
    }
}

【讨论】:

    【解决方案2】:

    试试这个

    导入 java.util.Scanner;

    导入 java.util.concurrent.*;

    公共类扫描{

    public static void main(String arg[]) throws Exception{
        Callable<Integer> k = new Callable<Integer>(){
    
            @Override
            public Integer call() throws Exception {
                System.out.println("Enter x :");
                return new Scanner(System.in).nextInt();
            }
    
        };
        Long start= System.currentTimeMillis();
        int x=0;
        ExecutorService l = Executors.newFixedThreadPool(1);  ; 
        Future<Integer> g;
        g= l.submit(k);
        while(System.currentTimeMillis()-start<10000&&!g.isDone()){
    
        }
        if(g.isDone()){
            x=g.get();
        }
        g.cancel(true);
    
        if(x==0){
            System.out.println("Shut Down as no value is enter after 10s"  );
        } else {
            System.out.println("Shut Down as X is entered "  + x );
        }
        //Continuation of your code here....
    }
    

    }

    【讨论】:

    • 我觉得太难了。 'System.exit(0)' 这就是我想要的。
    • 不,它没有退出程序......但是解决这个问题的类在最后一次执行后没有代码可以运行......就是这样
    • 上面的所有类都是在时间过去时终止等待或在输入值时终止循环......这是对问题的回应......对不起,如果这是误导