2012-08-04 44 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); 
     } 
    }); 
    }