Я делаю приложение Javafx
в Apache Felix
вместе с некоторыми экспериментами с использованием iPOJO
.
Сначала я вызываю метод Application.launch()
в другом классе, а затем запускаю другой класс, содержащий iPOJO @Requires
, вот так:
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();
}
}
Эта реализация выдает это исключение, java.lang.IllegalStateException: Toolkit not initialized
, но iPOJO
обнаружила класс реализации интерфейса 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();
}
Теперь iPOJO
выдает RuntimeException
, а LibraryClass
становится null
, а приложение выдает NullPointerException
.
Мои вопросы:
- Можно ли использовать
iPOJO
в этой ситуации? - Если да, то как правильно использовать
iPOJO
в приложенииJavaFX
?
Заранее спасибо! :D
maven-ipojo-plugin:1.12.1
с цельюipojo-bundle
- person megamoth   schedule 04.02.2015