Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在3.5秒后停止并跳过命令?_Java_Loops_Timer - Fatal编程技术网

Java 如何在3.5秒后停止并跳过命令?

Java 如何在3.5秒后停止并跳过命令?,java,loops,timer,Java,Loops,Timer,我想在命令等待输入3.5秒后停止并跳过该命令。我试图通过从开始时间中减去来使用System.currentTimeMillis(),但是我编写的代码不会跳过输入 食物是table类中的数组列表 public void timer() { startTime = System.currentTimeMillis(); while(false||(System.currentTimeMillis()-startTime)<3500) {

我想在命令等待输入3.5秒后停止并跳过该命令。我试图通过从开始时间中减去来使用
System.currentTimeMillis()
,但是我编写的代码不会跳过输入

食物是table类中的数组列表

public void timer() {
        startTime = System.currentTimeMillis(); 
        while(false||(System.currentTimeMillis()-startTime)<3500)
        {
            correct = input(); //What I want to skip after 3.5 seconds
        }
        record();
    }

您面临的问题之一是,当从控制台读取时,任何
扫描仪
下一步
方法都无法中断。因此,您必须以不同的方式读取输入,例如使用
InputStreamReader

之后,您可以将一个特定任务提交给一个独立于
主线程
处理“输入读取”执行的应用程序。您将获得一个可以定义超时的

请注意,此操作仍处于阻塞状态(在两个线程上)

此解决方案在某种程度上基于此

import java.io.*;
导入java.util.concurrent.*;
公开课考试{
静态类ReadInput实现了可调用{
公共整数调用()引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
试一试{
while(br.ready()==false){
睡眠(250);
}
字符串输入=br.readLine();
返回整数.parseInt(输入);
}捕捉(中断异常e){
返回null;
}
}
}
公共静态void main(字符串[]args){
整数输入=空;
ExecutorService ex=Executors.newSingleThreadExecutor();
试一试{
Future=ex.submit(new ReadInput());
输入=future.get(3500,时间单位为毫秒);
}捕获(ExecutionException | InterruptedException | TimeoutException e){
//处理需要处理的异常
}最后{
例如,关闭现在();
}
System.out.println(“完成:+输入”);
}
}

请注意,
ReadInput
中的超时时间应低于
主线程中的超时时间

您反复编写的代码要求输入3.5秒;这就是你想要的吗?不,我希望它停止要求输入,并在3.5秒后跳过代码。嘿,我真的很感谢你为帮助我所付出的努力。然而,我是一个新手(刚刚开始AP CS),希望进一步了解这段代码是什么,做什么。是的,我们还没有学习静态(我知道这很奇怪)。比如说,我是创建另一个类来放入第一个代码块,还是在所有代码下面进行?我在学习Eclipse之前就开始了这个项目,所以它是blueJ的,它还能工作吗?很抱歉问你所有这些,但是你能详细说明一下它是如何工作的吗?
静态
在这种情况下并不是真正相关的(我只是在创建它时将其用作主方法的旁边)。请随意创建一个
公共类(在其自己的文件中)。-我从未使用过
blueJ
,但它只是基本的java代码,与任何
IDE
都没有真正的关联。我把它放在我的类下,它说这里不允许修改器static。我添加了一个主类(
Test
),现在你可以简单地复制它。
public boolean input() 
    {
        Scanner console = new Scanner (System.in);

        //I want to skip everything after this after 3.5 seconds.

        int num = console.nextInt(); 
        num--;
        System.out.println("You selected " + table.food.get(num).toString());
        table.food.remove(num);
        if (num==choice) 
        {
            return true;
        }
        return false;
    }