我已经创建了一个用于启动Thread的GUI,它可以做很简单的事情。但是,子线程永远不会启动。
子线程如果启动,将提供一些输出;我没有得到任何输出。我错过了什么?
以下是代码:
GUI类:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class gui {
public static void main(String [] args) {
//final standalone s = new standalone();
final try2 t= new try2();
JFrame win = new JFrame();
win.setLayout(new FlowLayout());
JButton start = new JButton("Start");
JButton stop = new JButton("Stop");
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
t.t.start();
System.out.println("M on!");
try{
Thread.currentThread().sleep(10000);
}catch(Exception e1)
{
e1.printStackTrace();
}
System.out.println("M off!");
if(t.t.isInterrupted())
System.out.println("Stopped");
}
});
win.add(start);
win.add(stop);
win.setVisible(true);
}
}
这是Child Thread
public class try2 implements Runnable {
public Thread t;
int i;
try2() {
t=new Thread();
}
public void run() {
System.out.println(++i);
}
}
答案 0 :(得分:3)
当您致电t.t.start()
时,它会在t
对象的try2
字段中启动线程对象。不幸的是,这个线程没有Runnable
,所以当你启动它时,它会立即退出。不调用try2.run()
方法,因为线程对此一无所知。
您的代码令人费解。我将如下简化/修复它:
摆脱try2.t
字段。
在actionPerformed
方法中,按如下方式创建并运行线程:
new Thread(t).start();
其中t
是您的try2
个实例。
在修复代码时,try2
违反了我遇到过的所有Java风格指南。类名应始终以大写字母开头。养成做正确的习惯......
答案 1 :(得分:1)
让你的类try2扩展Thread
(并删除实现Runnable
)。然后只需在try2实例上调用start()
。
答案 2 :(得分:0)
你的类try2应该扩展Thread(并实现方法run()) 你正在处理它的方式,yuo正在try2中调用thread-Object的run()方法。但是这个对象的run() - 方法是空的。