Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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-如何创建延迟一定时间的字符串检查?_Java_If Statement_While Loop_Try Catch_Sleep - Fatal编程技术网

java-如何创建延迟一定时间的字符串检查?

java-如何创建延迟一定时间的字符串检查?,java,if-statement,while-loop,try-catch,sleep,Java,If Statement,While Loop,Try Catch,Sleep,我正在学习java,到目前为止,我已经使用if语句创建了一个密码检查。然而,我将我的工作字符串检查插入了while循环,并添加了Thread.sleep(3000);然而,在3秒钟的延迟中,一旦我完成了,我的GUI就在一个页面上保持滞后和冻结,就好像按下了按钮一样。有人能告诉我如何用一个字符串检查代码的工作示例,并在一定的尝试次数后延迟以阻止用户再次尝试吗? (以下是我所拥有的:) //var声明 布尔匹配=假; String1=“hi”; String2=(我知道这不是代码,只是为了省略一些代

我正在学习java,到目前为止,我已经使用if语句创建了一个密码检查。然而,我将我的工作字符串检查插入了while循环,并添加了Thread.sleep(3000);然而,在3秒钟的延迟中,一旦我完成了,我的GUI就在一个页面上保持滞后和冻结,就好像按下了按钮一样。有人能告诉我如何用一个字符串检查代码的工作示例,并在一定的尝试次数后延迟以阻止用户再次尝试吗? (以下是我所拥有的:)

//var声明
布尔匹配=假;
String1=“hi”;
String2=(我知道这不是代码,只是为了省略一些代码:)userInput
整数时间=3000;
int尝试=0;
//检查
而(!匹配和尝试<(最大尝试次数+1)){
if(String1.等于(String2)){
系统输出打印(“匹配”);
}
否则如果(尝试次数<11){
尝试++;
System.out.println(“失败:+尝试);
}
否则{
尝试++;
System.out.println(“请稍后再试,如果有:“+trust+”尝试失败”);
试一试{
睡眠(时间);
}
捕获(中断异常例外){
Logger.getLogger(PasswordEntry.class.getName()).log(Level.SEVERE,null,ex);
}
时间=时间+1000;//每次多出1秒
}
}

一旦第一次尝试不匹配,您的代码将执行无限循环

在循环的每个迭代中,除了递增计数器之外,没有任何更改。因此,计数器将永远增加(其间会有一些延迟)

代码背后的原因似乎是String2是在循环内部而不是外部使用用户输入进行更新的。这样,在每次迭代中,您将有不同的String2进行比较


这是您的问题,而不是尝试之间的延迟方式(这在任何情况下都可以得到改进)。

一旦第一次尝试不匹配,您的代码将执行无限循环

在循环的每个迭代中,除了递增计数器之外,没有任何更改。因此,计数器将永远增加(其间会有一些延迟)

代码背后的原因似乎是String2是在循环内部而不是外部使用用户输入进行更新的。这样,在每次迭代中,您将有不同的String2进行比较


这是您的问题,而不是尝试之间的延迟方式(这在任何情况下都可以得到改进)。

您应该避免使用Thread.sleep选项,因为它会完全冻结主线程。您还可以尝试创建另一个线程,该线程将被冻结,稍后将回调主线程。例如,通过布尔变量。我也同意Bladelight提到的计时器解决方案。

您应该避免使用Thread.sleep选项,因为它会完全冻结主线程。您还可以尝试创建另一个线程,该线程将被冻结,稍后将回调主线程。例如,通过布尔变量。我也同意Bladelight提到的计时器解决方案。

使用而不是睡眠。我将如何使用特定时间的计时器?计时器(时间)?如有需要,请参阅此处询问更多。使用计时器而不是睡眠。我将如何使用特定时间的计时器?计时器(时间)?如有需要,请参阅此处询问更多信息。
    //var declaration
    boolean match = false;
    String1 = "hi";
    String2 = (I know this is not code but just to omit some code:) userInput
    int time = 3000;
    int attempt = 0;
    //check
    while(!match && attempt < (maximumTries+1)){
        if(String1.equals(String2)){
            System.out.print("match");
        }
        else if(attempt < 11){
            attempt++;
            System.out.println("Failed:" + attempt);
        }
        else{
            attempt++;
            System.out.println("Please try again later you have:" + attempt + "failed attempts");
            try{
                Thread.sleep(time);
            }
            catch(InterruptedException ex) {
                Logger.getLogger(PasswordEntry.class.getName()).log(Level.SEVERE, null, ex);
            }
            time = time + 1000;//1 second more every time
        }
    }