-3

当我触发“等待”命令时,我想要暂停 1000 毫秒。例如,如果我的脚本包含以下内容:

print("first message")
wait()
print("second message <after the delay>")

我希望两条消息之间有 1000 毫秒的延迟。

但是,我的问题是它将整个应用程序冻结 1000 毫秒,然后同时触发两条消息。

这是我的代码:(我一直在这个网站上搜索解决方案,遇到了多个答案,说我需要创建自己的单独线程才能做到这一点:

       if(command.equals("wait")) {
            MyRunnable myRunnable = new MyRunnable();
            Thread t = new Thread(myRunnable);
            t.start();
        }

这是我单独的线程内部类:

public class MyRunnable implements Runnable {

    public MyRunnable() {
        try {
            Thread.sleep(2000);
        } catch (Exception e) {}
    }

    public void run() {
        try {
            Thread.sleep(2000);
        } catch (Exception e) {}
    }
}

我究竟做错了什么?

编辑:打印语句工作正常,这就是我将它们排除在外的原因。但是我是java新手,我注意到run()语句不起作用,所以我把它放在构造函数中

4

2 回答 2

3

从您的构造函数中删除 sleep() 调用 - 这是不必要的,并且在调用时会阻塞您的主线程,因为构造函数是同步执行的。

您的 runnable 没有任何打印语句,这就是打印所需要的。尝试这样的事情:

public class DelayedPrinter implements Runnable {
private String text;
public MyRunnable(String text) {
    this.text = text;
}

public void run() {
    try {
        Thread.sleep(2000);
    catch (Exception e){}
    print(text);
}

并这样称呼它:

new Thread(new DelayedPrinter(text)).start();

我不知道您使用的是什么脚本工具,但您的命令可能如下所示:

delayPrint("second message");

如何将它与上一行连接起来应该相当简单。

于 2013-06-23T21:03:14.270 回答
0

等待不会如你所想。它将当前线程推送到所谓的等待状态,可以由其他线程通知。它旨在用于线程间通信。

在此处查看更多信息:http: //docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()

在第二种情况下,您创建并启动一个新线程,该线程将休眠 2 秒并且不做任何事情就死掉。如果您在原始线程上写入控制台,则不会产生任何影响。

如果您想要的是 console.outs 之间的简单延迟,请尝试以下操作:

println("first message");
Thread.sleep();
println("second message <after the delay>");

更多信息在这里: http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#sleep(long)

于 2013-06-23T21:13:00.123 回答