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 来完成此任务。
我有一个小应用程序通过按一个按钮来计算时间,
我就是用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 来完成此任务。