Снимок javafx без отображения приложения или сцены
Привет, я использую JavaFx WebView для создания скриншота HTML-страниц, и он отлично работает, но я хотел знать, возможно ли это сделать без запуска приложения в графической Windows! Я имею в виду, что нет более легкого способа получить скриншот, чем этот:
public class WebViewSample extends Application {
private Scene scene;
@Override
public void start(Stage stage) {
// create scene
scene = new Scene(new Browser(snapshot), 750, 500, Color.web("#666970"));
stage.setScene(scene);
// show stage
stage.show();
}
WritableImage snapshot;
public static void main(String[] args) {
launch(args);
System.err.println("launched!");
}
}
class Browser extends Region {
final ImageView selectedImage = new ImageView();
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
private final WritableImage snapshotImage;
public Browser(WritableImage snapshot) {
this.snapshotImage= snapshot;
// process page loading
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
WritableImage newSnapshot = browser.snapshot(null, snapshotImage);
File file = new File("test2.png");
RenderedImage renderedImage = SwingFXUtils.fromFXImage(newSnapshot, null);
try {
ImageIO.write(renderedImage, "png", file);
} catch (IOException e1) {
e1.printStackTrace();
}
System.exit(0);
}
}
}
);
// load the home page
webEngine.load("http://localhost/");
//add components
getChildren().add(browser);
}
}
1 ответ
Решение
Для JavaFX 2.2 и ниже, подобной функциональности нет.
Безголовые приложения JavaFX в настоящее время невозможны, и основной поток JavaFX является обязательным.
Лучшее, что вы можете сделать, это прочитать несколько обходных путей для достижения этой цели.
Связанные вопросы Stackru: