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

Posted

技术标签:

【中文标题】java-如何创建延迟一定时间的字符串检查?【英文标题】:java- How do I create a String check with a delay of a certain amount of time? 【发布时间】:2018-01-13 05:36:33 【问题描述】:

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

    //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
        
    

【问题讨论】:

使用timers 代替睡眠。 如何使用具有特定时间的计时器?计时器(时间)? 看这里***.com/questions/2258066/… 如有需要请咨询。 【参考方案1】:

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

在循环的每次迭代中,除了递增计数器之外,根本没有任何变化。所以计数器只会永远增加(两者之间会有一些延迟)。

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于java-如何创建延迟一定时间的字符串检查?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA如何检查小数位

如何检查 Java 字符串是不是全是空格?

如何检查 PostgreSQL 中的复制延迟?

双重检查锁定与延迟优化

Java - 如何检查字符串是不是包含字符串数组的元素?

如何检查数组是不是有足够的位置来接受 Java 中数组的新值?