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