如何让Java延迟几秒钟?

25

大家好,我有这样的代码。我想要延迟几秒钟并显示“正在扫描…”

以下是我的代码。虽然它可以编译但没有任何延迟。

int i = 1;
if (i == 1) {
    try {
        Thread.sleep(1);
    } catch (InterruptedException ie) {
        System.out.println("Scanning...");
    }
}

6
那是1毫秒。当你遇到这样的问题,请阅读API/手册以获取帮助。 - Erran Morad
哇,我真笨。谢谢 :) - user2918193
等待,但是它在延迟时仍然没有显示正在扫描(抱歉我是一名高中学生)。 - user2918193
1
这是因为你在调用 sleep 后才打印输出。 - Brian Roach
1
是的,我明白了。抱歉我有点傻。谢谢大家。 - user2918193
显示剩余3条评论
12个回答

25
如果您想要暂停,请使用 java.util.concurrent.TimeUnit
TimeUnit.SECONDS.sleep(1);

睡眠一秒钟或十分钟

TimeUnit.MINUTES.sleep(10);

或者线程休眠

try        
{
    Thread.sleep(1000);
} 
catch(InterruptedException ex) 
{
    Thread.currentThread().interrupt();
}

请参阅官方文档

TimeUnit.SECONDS.sleep()将调用Thread.sleep。唯一的区别在于可读性和使用TimeUnit对于非明显时间间隔可能更易于理解。

但如果您想解决问题

        int timeToWait = 10; //second
        System.out.print("Scanning")
        try {
            for (int i=0; i<timeToWait ; i++) {
                Thread.sleep(1000);
                System.out.print(".")
            }
        } catch (InterruptedException ie)
        {
            Thread.currentThread().interrupt();
        }

6

Thread.sleep() 接受的参数是毫秒数,而不是秒数。

睡眠一毫秒是无法察觉的。尝试使用 Thread.sleep(1000) 来睡眠一秒钟。


4

Java:

计算时间我们使用以下方法:

import java.text.SimpleDateFormat;
import java.util.Calendar;


    public static String getCurrentTime() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    return sdf.format(cal.getTime());
}

第二点:

import java.util.concurrent.TimeUnit;

System.out.println("Start delay of 10 seconds, Time is: " + getCurrentTime());
TimeUnit.SECONDS.sleep(10);
System.out.println("And delay of 10 seconds, Time is: " + getCurrentTime());

输出:

开始延迟10秒,时间为:14:19:08

再延迟10秒,时间为:14:19:18

分钟:

import java.util.concurrent.TimeUnit;

System.out.println("Start delay of 1 Minute, Time is: " + getCurrentTime());
TimeUnit.MINUTES.sleep(1);
System.out.println("And delay of 1 Minute, Time is: " + getCurrentTime());

输出:

启动延迟1分钟,时间为:14:21:20

再延迟1分钟,时间为:14:22:20

毫秒:

import java.util.concurrent.TimeUnit;

System.out.println("Start delay of 2000 milliseconds, Time is: " +getCurrentTime());
TimeUnit.MILLISECONDS.sleep(2000);
System.out.println("And delay of 2000 milliseconds, Time is: " + getCurrentTime());

输出:

开始延迟2000毫秒,时间为: 14:23:44

然后延迟2000毫秒,时间为: 14:23:46

或者:

Thread.sleep(1000); //milliseconds

4

这是鼠标事件(mouseEvent)中的内容。

如果这是在Swing GUI中,则要删除所有调用Thread.sleep(...)的语句,因为这样做会使整个GUI陷入睡眠,导致无法使用。相反,使用Swing Timer来产生GUI中的任何延迟,同时仍然允许其更新其图形。

除了调试时,您还需要避免使用System.out.println(...)调用,并在GUI本身中显示用户通知,例如在状态JLabel或消息对话框中。


2

你在catch块中有System.out.println("Scanning...")语句。你想把它放到try块中吗?


2
 new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    if (getActivity() != null)
                        getActivity().runOnUiThread(() -> tvCovidAlert.startAnimation(animBounce));
                }
            }, DELAY_TIME_MILI_SECONDS);

1
根据Java文档,Thread.sleep的定义如下:
Thread.sleep(t);
where t => time in millisecons to sleep

如果您想让程序等待1秒钟,您需要使用以下代码:
Thread.sleep(1000);

1
一些问题,您没有延迟太久(.sleep 是毫秒,而不是秒),并且您在 catch 语句中尝试打印。您的代码应该看起来更像:
if (i==1) {
    try {
        System.out.println("Scanning...");
        Thread.sleep(1000); // 1 second
    } catch (InterruptedException ex) {
        // handle error
    }
}

1

你需要使用Thread.sleep()方法。

这个方法用于暂停当前线程的执行,时间以毫秒为单位指定。毫秒的参数值不能为负数,否则会抛出IllegalArgumentException异常。

FYI(摘自这里

Java Thread Sleep重要点:

  • 它总是暂停当前线程的执行。
  • 线程休眠不会丢失当前线程已获取的任何监视器或锁。
  • 任何其他线程都可以在睡眠中中断当前线程,在这种情况下将抛出InterruptedException异常。

1
使用 Thread.sleep(2000); //2000代表2秒

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接