2012-08-04 45 views
2

我创建了一个GUI类和一个演示类。 演示类正在调用GUI。我想在另一个线程中运行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

首先,从未&我们的意思是不要与任何线程(除了事件处理线程之外)的任何Swing组件进行交互。其次,问题到底是什么? – MadProgrammer 2012-08-04 10:00:30

回答

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(); 
      } 

     }); 
    } 
} 
+0

不错,但是我怎样才能从GUI类 – cfircoo 2012-08-04 10:55:30

+0

看到编辑方法。它只是一个例子。还有更多。在这个例子中,你可以在其他类中获得帧的静态引用。 – 2012-08-04 12:01:12

+0

@kleopatra对不起。整个gui应该在一个新的线程中创建。所以是的UserGui对象的初始化必须移动运行。 – 2012-08-04 12:19:26

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); 

      } 

     }); 
    } 
} 
+0

请参阅编辑。 – 2012-08-04 12:46:38

1

以下是用于在分离的线程中运行的帧由Net豆自动生成的代码

 public static void main(String[] args){ 

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

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