每当调用线程中的run方法时,我的GUI都会冻结,有人知道为什么吗?
主要:
try {
// Set System Look and Feel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (UnsupportedLookAndFeelException e) {
// handle exception
} catch (ClassNotFoundException e) {
// handle exception
} catch (InstantiationException e) {
// handle exception
} catch (IllegalAccessException e) {
// handle exception
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = new MainFrame(null, null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
从线程运行方法:
public void run() {
while (true) {
System.out.println("test");
}
}
应该启动线程的actionListener:
private ActionListener btnStartListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
robot.run();
}
};
public class RobotThread implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("test");
}
}
}
答案 0 :(得分:5)
那是因为run()
方法没有启动新线程。假设您的robot
引用引用Runnable
的实例,则需要调用以下内容;
new Thread(robot).start();
调用start()
将启动一个新线程,并在其上调用run()
方法。目前,您的run()
方法正在从它调用的同一个线程上运行(在您的实例中是事件派发线程)。