如何使用JavaFX图表API生成图表图像以进行导出而不首先显示

如何使用JavaFX图表API生成图表图像以进行导出而不首先显示,java,charts,javafx,javafx-2,javafx-8,Java,Charts,Javafx,Javafx 2,Javafx 8,我必须生成用于导出的折线图(另存为png),而不显示图表。我使用了来自JavaFX站点的现有示例。这样做对吗 下面是用于生成png图像的示例程序 public类FxChartDemo扩展应用程序{ 公共静态void main(字符串[]args){ 发射(args); } @凌驾 public void start(Stage)引发异常{ 阶段。设置标题(“折线图样本”); //定义轴 最终数字axis xAxis=新数字axis(); 最终数字axis yAxis=新数字axis(); xAx

我必须生成用于导出的折线图(另存为png),而不显示图表。我使用了来自JavaFX站点的现有示例。这样做对吗

下面是用于生成png图像的示例程序

public类FxChartDemo扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
阶段。设置标题(“折线图样本”);
//定义轴
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
xAxis.setLabel(“月数”);
xAxis.setLabel(“月数”);
//创建图表
线条图线条图=
新的线形图(xAxis、yAxis);
线形图.setTitle(“库存监控,2010年”);
//定义系列
XYChart.Series系列=新的XYChart.Series();
series.setName(“我的投资组合”);
//用数据填充序列
series.getData().add(新的XYChart.Data(1,23));
series.getData().add(新的XYChart.Data(2,14));
series.getData().add(新的XYChart.Data(3,15));
series.getData().add(新的XYChart.Data(4,24));
series.getData().add(新的XYChart.Data(5,34));
场景=新场景(线条图,800600);
线形图。设置动画(假);
lineChart.getData().add(系列);
saveAsPng(折线图,“c:\\temp\\chart.png”);
舞台场景;
saveAsPng(线形图,“c:\\temp\\chart1.png”);
//stage.show();
System.out.println(“演出后”);
}
公共void saveAsPng(折线图折线图,字符串路径){
WritableImage image=lineChart.snapshot(新的SnapshotParameters(),null);
文件=新文件(路径);
试一试{
write(SwingFXUtils.fromFXImage(image,null),“png”,文件);
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

不,它不工作。您应该尝试更改此代码:

        ......
        saveAsPng(lineChart, "c:\\temp\\chart.png");
        stage.setScene(scene);
        saveAsPng(lineChart, "c:\\temp\\chart1.png");
        //stage.show();
        System.out.println("After show");
    }
    public void saveAsPng(LineChart lineChart, String path) {
        WritableImage image = lineChart.snapshot(new SnapshotParameters(), null);
        ......
致:


非常适合我。

是的,应该行。行吗?后续行动会很好。
    ......
    saveAsPng(scene, "c:\\temp\\chart.png");
    stage.setScene(scene);
    saveAsPng(scene, "c:\\temp\\chart1.png");
    //stage.show();
    System.out.println("After show");
}
public void saveAsPng(Scene scene, String path) {
    WritableImage image = scene.snapshot(null);
    ......