java - JAVA线程问题

标签 java multithreading actionlistener

我试图让当我按下按钮时程序在新线程中启动一个方法。 问题是,当我按下按钮时,程序会卡住,直到该方法完成运行,就像我根本没有使用线程一样。有谁知道如何解决这个问题?

谢谢摩根。

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类可让您轻松创建多个涵盖常见用途的类。

更好:查看 SwingWorkerAPI docs .

关于java - JAVA线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7444376/

相关文章:

java - 更新 JTable 的内容

java - 如何在Java中传递颜色变量?

java - Java中的父类(super class)和子类

java - Jsoup 匹配任何具有命名空间的元素

Java异常: Should an exception contain its message inside or take it as parameter

java - 在 Android 中全屏显示来电 Activity

algorithm - 正常的 union/find 算法在没有任何额外工作的情况下是线程安全的吗?

c# - 多线程UI,无法BeginInvoke

java - 与快速更新新行的 JTable 交互

java - 在 Executor Service 的 ThreadPool 中添加线程