Thread.sleep(n) 会阻止其他事情发生吗?有更好的东西可以代替吗?

Is Thread.sleep(n) blocking other things from going? Something better to replace it?

我有一个小应用程序通过按一个按钮来计算时间,
我就是用thread.sleep()算出来的

按下按钮时,它会触发 ActionListener,它是一个 class,执行 thread.run()thread.sleep() 然后从 运行() 函数内部启动。

//The Thread
class twentyMins implements Runnable
    @Override
    public void run() {
        try {
            Thread.sleep(1000*60*20);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
    }
}

//The ActionListener
class Reset implements ActionListener {

    public static twentyMins count = new twentyMins();

    @Override
    public void actionPerformed(ActionEvent event) {
        count.run();
    }

}

问题是,按钮不会弹起,无法再次按下。
而且应用程序甚至无法通过按 JFrame 上的 EXIT 按钮来停止。

直截了当地说,我认为我的应用程序在 thread.sleep() 运行ning 时被冻结了。

还有比Thread.sleep()更好的吗?

你期待什么?您正在呼叫

count.run();

这将 运行 在同一个主线程中,从而阻塞它 20 分钟。考虑创建一个线程并对其调用 start()

您实际上并未在此处启动后台线程。任何对象都可以实现 Runnable(和 run 方法),但这并不能使它成为线程。因此,当您单击重置按钮时,它会锁定负责 UI.

的单个线程

您需要将 Runnable 对象传递给 Thread class 的构造函数(java.lang.Thread), as described in the official docs.

在主线程上执行 sleep() 将阻塞 UI。 您可以创建另一个线程或仅使用 java.util.Timer class 来完成此任务。