Thread.sleep(n)阻止其他事情发生吗?有什么更好的替代它?

伍柒貳*_*伍柒貳 1 java sleep

按下一个按钮我有一点应用计数时间,
我只需要使用thread.sleep()来计算.

按下按钮时,它会触发ActionListener,它是一个执行thread.run()的类.该Thread.sleep()方法,然后从run()函数中开始.

//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();
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是,按钮不会反弹并且可以再次按下.
按下JFrame上的EXIT按钮甚至无法停止应用程序.

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

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

Dan*_*ker 6

你实际上并没有在这里启动后台线程.任何对象都可以实现Runnable(和run方法)但不会使它成为一个线程.因此,当单击"重置"按钮时,它会锁定负责UI的单个线程.

您需要将Runnable对象传递给Thread类的构造函数(java.lang.Thread),如官方文档中所述.