他の人がこれを探している場合、これははるかに簡単な方法です。JavaFX 2.2 を使用して、次の操作を実行できました。
waitForInit = new Semaphore(0);
root = new Group();
root.getChildren().add(jfxnode);
FxPlatformExecutor.runOnFxApplication(() -> {
snapshot = jfxnode.snapshot(new SnapshotParameters(), null);
waitForInit.release();
});
waitForInit.acquireUninterruptibly();
BufferedImage bi = SwingFXUtils.fromFXImage(snapshot, null);
ノードをグループに追加する必要はありません。そこから、画像に対して必要な操作を行うことができます。
FxPlatformExecutor は、プロジェクトで使用している JME3-JFX ライブラリからのものです。参照: https://github.com/empirephoenix/JME3-JFX/blob/master/src/main/java/com/jme3x/jfx/FxPlatformExecutor.java
メソッドを簡単に作成しrunOnFxApplication()
たり、FxPlatformExecutor クラスを作成したりできます。
これがコードです。
package com.jme3x.jfx;
import javafx.application.Platform;
/**
* TODO This Class should be replaced by some Workmanager implemntation
* in the future
* @author Heist
*/
public class FxPlatformExecutor {
public static void runOnFxApplication(Runnable task) {
if (Platform.isFxApplicationThread()) {
task.run();
} else {
Platform.runLater(task);
}
}
}
このコードは私が書いたものではありません。github のリンクは上にあります。