我已经设置了一个后台任务,在给定的面板/图表变得可见后等待几秒钟。这是通过sleep
在后台非 GUI 线程上运行 a 来执行的,然后在唤醒时运行 a
Platform.runLater
创建快照和图像。
在保存图像的真正“动作”发生之前,我们可以看到窗口出现:
在渲染该图像时,我们有背景代码已被Task
. 在 5000 毫秒后,该后台任务唤醒并启动Platform.runLater
以将场景/窗格/图表保存到文件中。
这是快照和图像代码:
所有这些都发生在后台线程上,通过Task
提交到ThreadPool
Thread.sleep(5000) // Wait for images to be rendered -
// they are visually confirmed to be available at about 1000 ms actually
javafx.application.Platform.runLater(new Runnable() {
override def run() = {
// val snapShot = chart.snapshot(null)
// val snapShot = scene.snapshot(null)
val snapShot = pane.snapshot(null,null)
ImageIO.write(SwingFXUtils.fromFXImage(snapShot, null),
"jpg", new File(fileName))
正如您所看到的(从注释掉的行中) - 我对使用哪个对象来创建快照感到困惑:以上三个都已尝试:
- 图表
- 场景
- 窗格
结果总是黑色图像。OOC 我也尝试通过更改背景颜色
snapshotParameters.setFill(Color.WHITE)
那没有效果。
正确的程序是什么?
更新 我也尝试了一种callback
方法:
pane.snapshot( // Also tried scene and chart here ..
new Callback[SnapshotResult, Void]() {
override def call(result: SnapshotResult): Void = {
ImageIO.write(SwingFXUtils.fromFXImage(result.getImage, null),
"jpg", new File(fileName))
latch.countDown
null
}
},p,null)
同样 - 仍然是黑色图像。