使用窗口构建器时的默认GUI代码如下。
import java.awt.EventQueue;
import javax.swing.JFrame;
public class Goo {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Goo window = new Goo();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Goo() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我想从另一个类作为线程运行它。所以另一个类看起来像,
public class GooRun {
public static void main(String[] args) {
// TODO Auto-generated method stub
Goo myGoo = new Goo();
Thread myThread = new Thread(myGoo);
myThread.start();
}
}
当您不使用实现Runnable或扩展Thread时,我不完全理解run方法的工作原理。
我得到的错误是构造函数未定义Thread(Goo)未定义。
答案 0 :(得分:3)
你可以做以下两件事之一:
第一个选项:让myGoo
实施Runnable
:
public class Goo implements Runnable{
然后在run
中添加Goo
方法:
@Override
public void run() {
try {
Goo window = new Goo();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
之后,你可以像在其他main
中那样做:
public static void main(String[] args){
Goo myGoo = new Goo();
Thread myThread = new Thread(myGoo);
myThread.start();
}
基本上,这使得Goo
成为可以在线程启动时启动的东西(因此实现Runnable
)。
选项2:在main
中,您可以使用runnable创建一个线程:
public static void main(String[] args){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Goo myGoo = new Goo();
}
});
t.start();
}
答案 1 :(得分:0)
ItamarG3的解决方案1实际上不是一个好主意。
在这种情况下,您有两个run()
实例(main()
中一个实例,Goo
中一个实例),而您却不需要它们。
您应该在this.frame.setVisible(true);
中呼叫run()
,不要再new
另一个Goo
实例。