2013-10-02 4 views
1

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

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 Plugin Handler вроде этого: не

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, Кеплер (IDE для EE разработчика) JDK1.7.0_40

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

ответ

0
  1. Если это приложение запускается как дополнительный процесс?
  2. Если вы запускаете с помощью в Eclipse путь к классам, в котором вы выполняете класс, является тем из текущего пакета, который, скорее всего, не знает, что вы делаете (если вы не используете клипсы e (fx) и его адаптер крючки), и даже если бы вы, скорее всего, попали в неприятности, потому что FX и SWT используют один и тот же цикл событий, но не знают друг от друга, как вы его написали, чтобы вставлять FX в SWT, вы должны использовать FXCanvas.
+0

Он должен быть запущен после нажатия на пункт меню. Основываясь на том, что Eclipse-Plugin является SWT по умолчанию, я должен связаться с FXCanvas, не так ли? Спасибо, им это попробует. – Nick

+0

хорошо, если это просто диалог, тогда да - лучше реализовать его как JFace-Dialog или SWT-Shell, в которой есть FX-контент в FXCanvas, но я не уверен, что ваш вариант использования. В любом случае вам нужно будет использовать e (fx) клипс, когда вы находитесь в OSGi, не сможете найти javafx-libs, которые НЕ находятся в пути к классам Java7, переупаковка FX в вашем продукте обречена на провал либо (см. http://tomsondev.bestsolution.at/2012/08/01/javafx-2-2-and-osgi/) – tomsontom

+0

FX не является обязательным, но было бы здорово использовать. В любом случае, я попытаюсь превратить его в SWT-Shell. – Nick