Java:在鼠标单击事件上启动线程

标签 java multithreading

全部! :) 我是Java新手,所以,也许,我的问题有点愚蠢,但是...... 我正在尝试通过鼠标单击 JButton 来运行线程。

这里我添加了一个鼠标监听器:

btnGo.addMouseListener(new MouseAdapter() {
 @Override
 public void mouseClicked(MouseEvent e) {
  ThreadTest t = new ThreadTest();
  t.run();
  }
});

还有我的 ThreadTest 类:

public class ThreadTest extends Thread{

public void run()
{
    while(true)
    {   
        System.out.println("Tick!");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }       
}

}

线程通过单击正常启动(我在控制台中看到“Tick-s:)”,但带有窗口的主线程挂起:( 为什么会发生这种情况?

最佳答案

run() 不启动线程。尝试使用 start() 代替。

btnGo.addMouseListener(new MouseAdapter() {
 @Override
 public void mouseClicked(MouseEvent e) {
  ThreadTest t = new ThreadTest();
  t.start();
  }
});

但请注意:您只能启动线程一次!

也许实现接口(interface)更好(未经测试,如果有任何编译错误,抱歉):

public class RunnableTest implements Runnable{

public void run()
{
    while(true)
    {   
        System.out.println("Tick!");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }       
}

}

然后:

btnGo.addMouseListener(new MouseAdapter() {
 @Override
 public void mouseClicked(MouseEvent e) {
  Thread t = new Thread(new RunnableTest());
  t.start();
  }
});

(也许您需要先停止线程...)

关于Java:在鼠标单击事件上启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169349/

相关文章:

java - 优化 hibernate criteria 查询变得更加动态

Java获取以色列当前时间

multithreading - GO:在简单的 tcp 服务器上超过 10000 个线程?

java - new string(byte[]) 在多线程应用程序中太慢

未找到 C11 GCC threads.h?

java - Android - 错误膨胀类 fragment - XML 文件

java - 使用 charAt() 函数分配给 char 数组会引发错误

android - 3 秒后取消对话框 - 多次使用后我的应用程序不断崩溃

c++ - main() 对连续运行的线程内的编辑值具有只读访问权限 - C++

java - 为什么流行的框架在内部使用字节码操作?