2011-03-29 3 views
0

GUI 용 스윙 프레임 워크를 사용하는 독립 실행 형 Java 응용 프로그램을 구현했습니다. GUI의 일부로 버튼을 클릭 한 후 나타나는 JTextArea가 있으며 작업이 처리 된 후 jtextarea에 추가됩니다 나는 jtextarea가 응용 프로그램을 정지시키고 완벽하게 작동하지 않기 때문에 SwingWorker 라이브러리를 사용하고 있습니다. 작업 코드는 재정의 된 doInBackground 안에 있습니다.Eclipse 플러그인 코드가 외부 자바 스윙 애플리케이션에서 스윙 워킹 스레드를 호출 할 수없는 이유는 무엇입니까?

내가 직면하고있는 문제는 Eclipse 플러그인의 일부로이 GUI 애플리케이션을 시작할 때이다. 스윙 애플리케이션으로 jar 파일을 빌드하고 Eclipse Workbench에 확장을 추가했다. 처음에는 app 제대로 시작했지만 응용 프로그램 흐름이 swingworker가 호출 될 시점으로 이동하면이 특정 jtextarea가 멈추고 아무 일도 일어나지 않습니다. 내 Swingworker의 doInBackground() 함수 안에있는 코드가 호출되지 않은 것으로 보입니다. 나는 아래와 같이 일식 Pugin에 코드 내부의 응용 프로그램을 실행하고 있습니다 :

메인 프레임 자바 프로그램의 JFrame의 클래스입니다
SwingUtilities.invokeLater(new Runnable() {public void run() { 
       new MainFrame.setVisible(true); 
      } 
     }); 

. 왜 이런 일이 발생했는지 알고 있습니까?

답변

1

SWT와 AWT/Swing UI를 같은 프로세스에서 혼합하는 것은 쉽지 않습니다. 서로 다른 이벤트 루프가 필요합니다. Eclipse 프로세스에서 Awt/Swing 이벤트 루프가 실행 중이 아니기 때문에 코드가 작동하지 않습니다. SWT에서 UI를 다시 작성하거나 SWT-AWT 브리지를 연구 할 수 있습니다. 다리는 "작동"하지만 수많은 결함이 있습니다. 엄청난 양의 AWT/Swing이 있고 상황이 SWT로 포팅되는 동안 일시적인 해결책이 필요한 상황에만 적합합니다.

0

Runtime.exec()를 사용하여 외부 프로그램을 호출 해 보았습니까?

Eclipse SWT/Jface와 Swing을 함께 사용하는 것은 어려운 주제입니다.