2015-02-03 5 views
1

iPOJO을 사용하여 몇 가지 실험과 함께 응용 프로그램을 Apache Felix에서 수행하고 있습니다.JavaFX 응용 프로그램에서 iPOJO 사용

먼저 I 다른 클래스의 Application.launch() 메소드를 호출하고 다음과 같이 iPOJO @Requires를 포함하는 다른 클래스 시작이다

이 구현이 예외 java.lang.IllegalStateException: Toolkit not initialized하지만 구현 클래스있는 iPOJO를 발생
public class JavafxApp extends Application { 
    @Override 
    public void start(Stage primaryStage){ 
     /* Do nothing here because I thought I can initialize JavaFX in a different class */ 
    } 

    public static void start(){ 
     Platform.runLater(() -> { 
      launch(JavafxApplication.class); 
     }); 
    } 
} 


@Component 
@Instantiate 
public class MyApplication { 
    @Requires 
    LibraryClass class; 

    @Validate 
    public void start(){ 
     JavafxApp.start(); 
     class.someMethod(); 
    } 

} 

LibraryClass 인터페이스.

일부 연구 끝에 응용 프로그램이 javafx.application.Application을 확장하는 클래스 내부에 있어야하므로 일부 구조 조정을 수행했음을 알게되었습니다.

@Component 
@Instantiate 
public class JavafxApp extends Application { 

    @Requires 
    LibraryClass class; 

    @Override 
    public void start(Stage primaryStage){ 
     class.someMethod(); 
    } 

    @Validate 
    public void start(){ 
     launch(JavafxApp.class); 
    } 

} 

편집

LibraryClass 인터페이스 및 구현 :

@Component 
@Provides 
@Instantiate 
public class LibraryClassImplementation implements LibraryClass { 

    public void someMethod(){ 
     system.out.println("Hello Javafx using iPOJO"); 
    } 

} 

public interface LibraryClass { 
    public void someMethod(); 
} 

는 이제 iPOJORuntimeException 발생하고 LibraryClassnull되고 응용 프로그램이 NullPointerException가 발생합니다.

내 질문은 :

  • 는이 상황에서 iPOJO을 사용할 수 있습니까?
  • JavaFX 응용 프로그램에서 iPOJO을 사용하는 올바른 방법은 무엇입니까? 사전에

감사합니다! : D

+0

더 많은 정보를 포함해야합니다. LibraryClass는 어떤 모습입니까? 그것은 정확하게 ipojo-ized입니까 ?? JavafxApp은 MyApplication 또는 LibraryClass와 어떤 관련이 있습니까 ?? – Hilikus

+0

예 인터페이스가 올바르게 ipojo 화되어 있고'ipojo-bundle' 목표로'maven-ipojo-plugin : 1.12.1'을 사용하고 있습니다. – megamoth

답변

0

JavaFX 응용 프로그램 인스턴스는 Application 클래스의 정적 시작 메서드 중 하나를 사용하여 JavaFX 플랫폼에서 만들어야합니다. AFOIK와 같은 다른 프레임 워크가 클래스를 인스턴스화하는 것은 불가능합니다. 그러나 두 번째 구현에서는 응용 프로그램에 iPOJO (?) 주석을 추가하여 클래스의 인스턴스를 만들 것이라고 추측합니다. 그러나 프레임 워크가 아닌 애플리케이션 인스턴스를 생성해야하는 것은 시작 메소드입니다.

첫 번째 구현에서는 JavaFX 응용 프로그램 스레드에서 시작 메소드를 호출하려고합니다. 그러나 JavaFX 플랫폼과 JavaFX 응용 프로그램 스레드를 시작하는 시작 방법입니다. 또한 응용 프로그램이 종료 될 때까지 실행 방법이 반환되지 않습니다.

그렇다면 OSGi (Apache Felix) 및 Maven을 기반으로 한 JavaFX 용 새 리치 클라이언트 플랫폼 Drombler FX의 Early Access 버전을 출시했습니다.

응용 프로그램 프레임 워크로 JavaFX 및 OSGi가 제대로 시작되고 기본 창을 제공하는지 확인합니다.

현재 Drombler의 FX에 대한 자세한 읽을 수 있습니다 : 지금까지합니다 (Apache Felix SCR Annotations에서 생성) 선언적 서비스를 사용하고 http://puces-blog.blogspot.ch/search/label/Drombler

을, 그러나 나는 또한 새로운 서비스에 대한 iPOJO를 사용할 수 있어야한다 같아요.

몇 가지 간단한 단계로 Drombler FX 샘플 응용 프로그램을 작성, 빌드 및 실행하는 방법을 설명하는 Getting Started 페이지가 있습니다.

+0

@Pruce는 왜 그것이 작동하지 않는지에 대한 통찰력을 줄 수 있습니까? 너는이 지역의 전문가 야? 덕분에 D – megamoth

+0

@Arjay JavaFX 응용 프로그램 인스턴스는 Application 클래스의 정적 실행 메소드 중 하나를 사용하여 JavaFX 플랫폼에서 만들어야합니다. AFOIK와 같은 다른 프레임 워크가 클래스를 인스턴스화하는 것은 불가능합니다. 시작 메소드는 응용 프로그램이 종료 될 때까지 리턴하지 않습니다. 시작 메소드는 start 메소드를 호출 할 것이므로 명시 적으로 호출해서는 안됩니다. – Puce

+0

예, JavafxApp.start(); 대신'launch (JavafxApp.class);를 호출 한 두 번째 부분에서 첫 번째 구현 이었지만 'iPOJO'는 여전히 작동하지 않습니다. 'iPOJO'는'Javafx' 스레드와 호환되지 않습니까? – megamoth