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

时间:2015-04-27 17:26:45

标签: 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 =
                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();

我可以Inject在这里做什么吗?

已更新

代码

@PostConstruct
    public void initializeChart(Composite parent) {
        FXCanvas canvas = new FXCanvas(parent, SWT.NONE);
        Group group = new Group();
        Scene scene = new Scene(group);
        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.getChildren().add(chart);
        canvas.setScene(scene);
    }

我使用jdk 1.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

1 个答案:

答案 0 :(得分:6)

您的问题已变成此问题的副本 e(fx)clipse equinox compilation error但是既然有些事情从那以后发生了变化,我将在这里回答。

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

  

你看到“java.lang.NoClassDefFoundError”的原因是Equinox没有参考Ext-classpath,而且你很可能不会告诉Equinox使用我们的适配器钩子来使equinox参考这条路径。

     

您需要做的是:

     

确保您的发布中有org.eclipse.fx.osgi个片段并制作   确定你将-Dosgi.framework.extensions=org.eclipse.fx.osgi作为VM传递   启动配置中的参数

使用此方法,您还必须导入javafx.*中的MANIFEST.MF个软件包,并且需要在目标平台中使用软件包org.eclipse.fx.javafx来提供这些导入。< / p>

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

告诉Equinox使用扩展类加载器
-Dorg.osgi.framework.bundle.parent=ext

到vm参数。使用此功能,需要捆绑org.eclipse.fx.osgiorg.eclipse.fx.javafx,您无需修改​​MANIFEST.MF

这种风格最近由Tom Schindl推荐,并且也被e(fx)clipse与版本2.0一起使用。有关详细信息,请参阅此论坛帖子:https://www.eclipse.org/forums/index.php/t/1063826/