2012-08-04 2 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

답변

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

+0

편집을 참조하십시오. 그 하나의 예입니다. 더있다. 이 예제에서는 서로 다른 클래스에서 프레임의 정적 참조를 가져올 수 있습니다. –

+0

@kleopatra u r 죄송합니다. 전체 GUI는 새로운 스레드에서 만들어야합니다. 그래서 예, UserGui 객체의 초기화가 실행되도록 이동해야합니다. –

1

1.Event Dispatcher Thread (EDT)는 GUI를 담당하고 있습니다. GUI 애플리케이션에서

2main() 방법은 살고, GUI를 처리하기 위해 이제 ..이 종료 스레드 동부 서머 타임 자사의 책임을 이벤트 디스패처의 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

수정 사항을 참조하십시오. –

1

다음은 분리 된 스레드에서 프레임을 실행하기위한 자동 순 콩에 의해 생성 된 코드를

 public static void main(String[] args){ 

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

     public void run() { 
      new BoardPlay().setVisible(true); 
     } 
    }); 
    } 
관련 문제