Плагин Eclipse выполняет приложение Javafx

вот моя проблема: я разрабатываю плагин Eclipse, который должен запускать Javafx-приложение. На самом деле должно быть довольно легко, но у меня все еще есть проблема. Вот мой пример кода для простого fx-приложения:

public class UIContainer extends Application{



public static void main(String[] args){
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("First FXML Example");
    Pane myPane = (Pane)FXMLLoader.load(getClass().getResource("gui.fxml"));
    Scene myScene = new Scene(myPane);
    primaryStage.setScene(myScene);
    primaryStage.show();
}

Теперь я хочу запустить приложение из обработчика подключаемых модулей Eclipse следующим образом:

public Object execute(ExecutionEvent event) throws ExecutionException {

   IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
   //Call the UIContainer here
   //do sth. else
   return null;
}

На самом деле нет никакой разницы в вызове приложения через основной или метод запуска в соответствии с сообщением об ошибке.

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javafx/application/Application
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63)
at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243)
at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
...
Caused by: java.lang.ClassNotFoundException: javafx.application.Application cannot be found by XODR-Validator_0.0.1.qualifier
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 60 more

Надеюсь, вы сможете отследить мою проблему, чтобы найти решение.

Моя конфигурация: Eclipse Kepler (IDE для разработчиков EE) JDK1.7.0_40

Заранее спасибо!


person Nick    schedule 02.10.2013    source источник


Ответы (1)


  1. Должно ли это приложение запускаться как дополнительный процесс?
  2. Если вы запускаете с помощью Eclipse, путь к классам, в котором вы выполняете класс, — это путь из текущего пакета, который, скорее всего, не знает, что вы делаете (если только вы не используете e(fx)clipse и его хуки-адаптеры) и даже если бы это было так, у вас, скорее всего, возникнут проблемы, потому что FX и SWT используют один и тот же цикл событий и, но не знают друг друга, как вы его написали, чтобы встроить FX в SWT, вы должны использовать FXCanvas.
person tomsontom    schedule 02.10.2013
comment
Он должен запускаться после нажатия пункта меню. Основываясь на том факте, что Eclipse-Plugin по умолчанию является SWT, я должен связаться с FXCanvas, верно? Спасибо, я попробую этот. - person Nick; 02.10.2013
comment
хорошо, если это просто диалог, то да - вам лучше реализовать его как JFace-Dialog или SWT-Shell, содержащий FX-контент в FXCanvas, но я не уверен, каков ваш вариант использования. В любом случае вам придется использовать e(fx)clipse, когда вы находитесь в OSGi, и вы не сможете найти javafx-libs, которые НЕ находятся на пути к классам в Java7, переупаковка FX в вашем продукте также обречена на неудачу ( см. tomsondev.bestsolution.at/2012/08/ 01/javafx-2-2-и-осги) - person tomsontom; 02.10.2013
comment
FX не является обязательным, но было бы здорово использовать. В любом случае, я попытаюсь обернуть его в SWT-Shell. - person Nick; 02.10.2013