2014-01-16 4 views
1

안녕하세요, SWT에서 JavaFX로 GUI를 업그레이드하고 처음부터 문제가 있습니다. 주요 클래스는 스레드를 상속 해, 특정 방법 (인터페이스 구현)에서 실행되고 :JavaFX 컨트롤러를 별도의 스레드로 실행하십시오.

@Override 
public void mStart() { 


    this.start(); 

} 

@Override 
public void mStop() { 

    this.shell.dispose(); 

} 

내 FX의 GUI는 SceneBuilder 만들어집니다. 질문 : Controller가 자동으로 인스턴스화 될 때 다른 스레드에서 시작하도록 Controller를 관리하는 방법은 무엇입니까?

답변

2

일부 연구 끝에 결론은 다음과 같습니다. JavaFX 응용 프로그램은 FX 응용 프로그램과 다른 스레드로 실행될 수 있으며 runnable을 구현하고 launch() 메서드를 run()에 삽입하면됩니다. 그런 다음 GUI를 시작해야하는 스레드에서 offcourse start()를 수행하십시오. 그런 다음 이런 식으로 뭔가를해야 다른 스레드 내에서 컨트롤 (버튼, 라벨, 패널 등)을 업데이트하려면 : herehere

+0

고마워요. – Dinesh

1

글쎄, 나는 장면 빌더도 SWT를 사용한 적이 있지만, 한 가지는 확실 해요 :

자바 FX 애플리케이션 스레드가 기존의 자바 FX 요소들을 돌보는 책임이있다. JavaFX 요소 here을 올바르게 처리하는 방법에 대한 세부 정보를 찾을 수 있습니다. 제 생각에는 JavaFX 응용 프로그램 스레드를 사용하여 JavaFX 요소에 액세스해야합니다. JavaFX 응용 프로그램 스레드는 Platform 클래스의 runLater 메서드를 사용하여 수행 할 수 있습니다. 보세요 :

http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater%28java.lang.Runnable%29

는 언제나처럼, 우리는 우리가 자바 프로그램의 메인 스레드에서 자바 FX 애플리케이션을 시작해야합니다 알고있다. 당신이 할 수있는 것은 SWT 어플리케이션의 어느 지점에서나 메인 스레드를 사용하여 메인 JavaFX 클래스의 시작자를 호출하는 것입니다. 예를 들어 SWT 애플리케이션의 한 지점에서 launch으로 전화하면됩니다.

그러나 JavaFX 응용 프로그램이 마무리 될 때까지 주 스레드 (실행을 호출해야하는 스레드)는 잠겨 있음을 잊지 마십시오.

희망, 도움이되고 행운을 빕니다. :)

+0

예는 도움 자세한 내용은 글을 읽기

Platform.runLater(new Runnable() { @Override public void run() { //Update UI here } }); 

아주 로아. 하지만 정확히 당신이 내 주 스레드 위에 쓴 것처럼 시작 메서드를 호출 한 후 잠겨 있습니다. 주 FX 클래스에서 runnable을 구현하고 별도의 Thread에서 start() 메소드를 실행하면 어떨까요? – sw1

+0

JavaFX 응용 프로그램 스레드가 아닌 다른 스레드에서 JavaFX 응용 프로그램을 시작한다는 의미입니까? 나는 그것을 추천하지 않을 것이다. 링크의 JavaFX 문서에는 Java 플랫폼의 여러 스레드에 각각 적절한 용도가 있음이 분명하게 명시되어 있습니다. 아아! 그것을 발견! 이것을 확인하십시오 : http://docs.oracle.com/javafx/2/swt_interoperability/jfxpub-swt_interoperability.htm – Loa

+0

FX 스레드가 아닌 주 스레드와는 별도의 스레드에서 전체 JavaFX 응용 프로그램을 시작하려고했습니다. . 이제 SWT에서 JavaFX로 전환하여 나머지 프로젝트를 크게 변경하지 않고도 실행할 수 있도록해야합니다. 그러나 문제는 주요 SWT 클래스에는 버튼, 라벨 등을 초기화 한 후 전체 앱 수명주기 동안 실행되는 while 루프가 있다는 것입니다. FX 방식에서는 primaryStage.Show() 메서드를 실행 한 후 나머지 흐름을 잠그는 동안 문제가 발생합니다. – sw1

관련 문제