我试图让当我按下按钮时程序在新线程中启动一个方法。 问题是,当我按下按钮时,程序会卡住,直到该方法完成运行,就像我根本没有使用线程一样。有谁知道如何解决这个问题?
谢谢摩根。
public Listeners()
{
Calendar.ButtonAddReminder.addActionListener(new ButtonAddListener());
}
private class ButtonAddListener implements ActionListener
{
public void actionPerformed(ActionEvent e) {
new Thread(Calendar.reminder.Reminderchecker(Calendar.reminder.addReminder(date, str))) .start();
}
}
最佳答案
由此看来,Calendar.reminder.addReminder()
或 Calendar.reminder.Reminderchecker()
中的某些内容需要一些时间并锁定 UI,因为这就是 EDT 中发生的情况。
编辑:哦,我明白了。你没有做你认为你正在做的事情。您正在当前线程中执行 Reminderchecker
。该方法返回的 Runnable 是在新线程中执行的内容。要在线程中运行 Reminderchecker
,请执行以下操作:
new Thread(new Runnable() {
public void run() {
Calendar.reminder.Reminderchecker(...);
}
}).start();
更好:不要像那样生成自己的随机线程。使用有组织的并发策略,例如 ExecutorService
提供的策略。 Executors
类可让您轻松创建多个涵盖常见用途的类。
更好:查看 SwingWorker它API docs .
关于java - JAVA线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7444376/