如何在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();
Run Code Online (Sandbox Code Playgroud)
我能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);
}
Run Code Online (Sandbox Code Playgroud)
我使用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
Run Code Online (Sandbox Code Playgroud)
你的问题变成了这个问题的副本 e(fx)clipse equinox编译错误,但由于从那时起一些事情发生了变化,我将在这里回答.
首先,我引用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在目标平台中提供软件包以提供这些导入.
另一种更简单的方法是通过添加来告诉Equinox使用扩展类加载器
-Dorg.osgi.framework.bundle.parent=ext
Run Code Online (Sandbox Code Playgroud)
到vm参数.使用它,您不再需要捆绑包org.eclipse.fx.osgi,org.eclipse.fx.javafx也不需要修改MANIFEST.MF.
Tom Schindl最近建议使用这种风格,e(fx)clipse也使用2.0版本.有关更多信息,请参阅此论坛帖子:https://www.eclipse.org/forums/index.php/t/1063826/
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |