java webengine_如何以Java实现网页截图技术
展開全部
使用JavaFX8(JDK8打包在一起)
public void start(Stage primaryStage) throws Exception {
final WebView view = new WebView();
Scene scene = new Scene(view, 310, 310);
primaryStage.setScene(scene);
final WebEngine webEngine = view.getEngine();
webEngine.load(this.getClass().getResource("web/index.html")
.toExternalForm());
primaryStage.show();
// 方式1. 監聽webEngine加載進度,可能頁面加載不完整
webEngine.getLoadWorker().stateProperty()
.addListener(new ChangeListener() {
@Override
public void changed(ObservableValue extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
snapshot(view);
}
}
});
// 方式2. 使用Transition設定延時62616964757a686964616fe59b9ee7ad9431333337613834
PauseTransition ptr = new PauseTransition(Duration.seconds(3));
ptr.setOnFinished(new EventHandler() {
@Override
public void handle(ActionEvent event) {
snapshot(view);
}
});
ptr.play();
//方式3. 使用Task設定延時
Task task = new Task() {
@Override
protected String call() throws Exception {
Thread.sleep(5000);
return null;
}
};
task.setOnSucceeded(new EventHandler() {
@Override
public void handle(WorkerStateEvent event) {
snapshot(view);
}
});
new Thread(task).start();
// 方式4. 自己實現多線程調用,較麻煩
new Thread(){
public void run() {
try {
Thread.sleep(7000);//該命令不可直接在Fx用戶線程執行,否則會導致前臺的渲染線程暫停,頁面不會被加載
Platform.runLater(new Runnable() {
@Override
public void run() {
snapshot(view);//在后臺線程中不可以直接操作UI,需要借助runLater
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
}
public void snapshot(Node view) {
Image image = view.snapshot(null, null);
try {
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png",
new File("f:\\" + System.currentTimeMillis() + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
總結
以上是生活随笔為你收集整理的java webengine_如何以Java实现网页截图技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java socket 二次发送_发过2
- 下一篇: java robot 控制 不用用户 界