从线程中的不同类运行GUI

时间:2012-08-04 09:52:19

标签: java multithreading swing user-interface

我创建了一个GUI类和一个演示类。 demo类正在调用GUI。我想在另一个线程中运行GUI。

GUI类

public class UserGui extends JFrame {
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                UserGui frame = new UserGui();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
 }

演示班:

public class NNDemo {

    public static void main(String[] args) {
        UserGui gui = new UserGui();
        gui.setVisible(true);

    }
}

3 个答案:

答案 0 :(得分:2)

public class UserGui extends JFrame {
    public UserGui() {}

    public void showGui() {
        setVisible(true);
    }
}

public class Demo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                  final UserGui GUI = new UserGui();
                  GUI.showGui();
             }

        });
    } 
}

答案 1 :(得分:1)

1。 Event Dispatcher Thread(EDT)负责Gui。

GUI应用程序中的 2。 main()方法不长期,并且在事件调度程序线程中调度GUI的构造后,它会退出..所以现在它是EDT处理GUI的责任。

这就是我喜欢做上面例子的方式:

public class UserGui extends JFrame {

    public UserGui() {

      // You can set the size here, initialize the state and handlers.
    }


}



public class Demo {

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
             public void run() {

              new UserGui().setVisible(true);

             }

        });
    } 
}

答案 2 :(得分:1)

以下是Net beans自动生成的代码,用于在分离的线程中运行框架

     public static void main(String[] args){

    /*
     * Create and display the form
     */
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new BoardPlay().setVisible(true);
        }
    });
   }