全部! :) 我是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/