Eclipse 如何在e4 SWT中显示JavaFX图表?

Eclipse 如何在e4 SWT中显示JavaFX图表?,eclipse,javafx,e4,Eclipse,Javafx,E4,如何在e4中显示JavaFX图表 比如这个 Scene scene = new Scene(new Group()); stage.setTitle("Imported Fruits"); stage.setWidth(500); stage.setHeight(500); ObservableList<PieChart.Data> pieChartData = FXCollectio

如何在e4中显示JavaFX图表

比如这个

 Scene scene = new Scene(new Group());
        stage.setTitle("Imported Fruits");
        stage.setWidth(500);
        stage.setHeight(500);

        ObservableList<PieChart.Data> pieChartData =
                FXCollections.observableArrayList(
                new PieChart.Data("Grapefruit", 13),
                new PieChart.Data("Oranges", 25),
                new PieChart.Data("Plums", 10),
                new PieChart.Data("Pears", 22),
                new PieChart.Data("Apples", 30));
        final PieChart chart = new PieChart(pieChartData);
        chart.setTitle("Imported Fruits");

        ((Group) scene.getRoot()).getChildren().add(chart);
        stage.setScene(scene);
        stage.show();
我用JDK1.8.0_45启动我的应用程序,但是我得到了以下错误

java.lang.NoClassDefFoundError: javafx/scene/Parent
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
    at java.lang.Class.getDeclaredConstructors(Class.java:2020)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:306)
    ... 124 more
Caused by: java.lang.ClassNotFoundException: javafx.scene.Parent cannot be found by amap.impactassessment_1.0.0.qualifier
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:423)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:336)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:328)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 128 more

你的问题变成了这个问题的重复 但由于自那以后有些事情发生了变化,我将在这里回答

首先,我引用Tom Schindl对原始问题的回答:

您看到java.lang.NoClassDefFoundError的原因是Equinox不参考Ext类路径,而且很可能您没有告诉Equinox使用适配器挂钩,让Equinox参考该路径

您需要做的是:

确保您的启动中有org.eclipse.fx.osgi片段,并使 确实要将-Dosgi.framework.extensions=org.eclipse.fx.osgi作为VM传递吗 启动配置中的参数

使用此方法,您还必须在MANIFEST.MF中导入javafx.*包,并且您需要在目标平台中拥有包org.eclipse.fx.javafx来提供这些导入

另一种更简单的方法是通过添加

-Dorg.osgi.framework.bundle.parent=ext
添加到vm参数。使用此工具,您不再需要捆绑包org.eclipse.fx.osgi和org.eclipse.fx.javafx,也不需要修改MANIFEST.MF


Tom Schindl最近建议使用这种风格,efxclipse在2.0版中也使用了这种风格。有关更多信息,请参阅本论坛帖子:

您的问题已变成此问题的副本 但由于自那以后有些事情发生了变化,我将在这里回答

首先,我引用Tom Schindl对原始问题的回答:

您看到java.lang.NoClassDefFoundError的原因是Equinox不参考Ext类路径,而且很可能您没有告诉Equinox使用适配器挂钩,让Equinox参考该路径

您需要做的是:

确保您的启动中有org.eclipse.fx.osgi片段,并使 确实要将-Dosgi.framework.extensions=org.eclipse.fx.osgi作为VM传递吗 启动配置中的参数

使用此方法,您还必须在MANIFEST.MF中导入javafx.*包,并且您需要在目标平台中拥有包org.eclipse.fx.javafx来提供这些导入

另一种更简单的方法是通过添加

-Dorg.osgi.framework.bundle.parent=ext
添加到vm参数。使用此工具,您不再需要捆绑包org.eclipse.fx.osgi和org.eclipse.fx.javafx,也不需要修改MANIFEST.MF


Tom Schindl最近建议使用这种风格,efxclipse在2.0版中也使用了这种风格。有关更多信息,请参阅本论坛帖子:

不清楚您在问什么。您是在e4中使用SWT还是在一切都是JavaFX的情况下使用efxclipse?我相信您在SWTSeems中使用JavaFX就像我必须使用JDK1.8.040一样。我正在尝试这个。感谢您提出我为什么在JDK 1.8.045中找不到FXCanvas的想法?可能与EclipseIt没有将jfxswt.jar库包括在JRE系统库中有关。不清楚您在问什么。您是在e4中使用SWT还是在一切都是JavaFX的情况下使用efxclipse?我相信您在SWTSeems中使用JavaFX就像我必须使用JDK1.8.040一样。我正在尝试这个。感谢您告诉我为什么我在JDK1.8.0_45中找不到FXCanvas?可能与Eclipse没有将jfxswt.jar库包含在JRE系统库中有关