如何将Java文件作为Java中另一个类的线程运行?

时间:2016-12-15 20:58:38

标签: java multithreading swing user-interface runnable

使用窗口构建器时的默认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)未定义。

2 个答案:

答案 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)。

OR

选项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实例。