Java 在WebView完全加载后执行任务

Java 在WebView完全加载后执行任务,java,javafx,webview,javafx-2,Java,Javafx,Webview,Javafx 2,WebEngine完成加载后,是否可以让任务自动运行?我知道我可以从WebEngine获得一个Worker来指示加载进度,但重复轮询Worker似乎不是一个优雅的解决方案(即在页面加载之前锁定程序)。我知道我可以通过任务来完成这项工作,因此我可以通过某种方式获得WebEngine的任务,并添加一个完整的执行命令吗?基于以下内容的示例: webView.getEngine().getLoadWorker().stateProperty().addListener( 新的ChangeListener

WebEngine
完成加载后,是否可以让任务自动运行?我知道我可以从
WebEngine
获得一个
Worker
来指示加载进度,但重复轮询
Worker
似乎不是一个优雅的解决方案(即在页面加载之前锁定程序)。我知道我可以通过
任务
来完成这项工作,因此我可以通过某种方式获得
WebEngine
任务
,并添加一个完整的执行命令吗?

基于以下内容的示例:

webView.getEngine().getLoadWorker().stateProperty().addListener(
新的ChangeListener(){
@凌驾
更改公众假期(

ObservalEvalue这是不完整的,因为代码将在每次页面完成加载时运行,或者您必须在代码运行后删除侦听器,或者找到另一个解决方案…方法();然后是webEngine.getLoadWorker().stateProperty().removeListener(this);@firephil我更新了答案,以包含您评论中的建议。
webView.getEngine().getLoadWorker().stateProperty().addListener(
  new ChangeListener<Worker.State>() {
  @Override
  public void changed(
    ObservableValue<? extends Worker.State> observable,
    Worker.State oldValue, Worker.State newValue ) {

    if( newValue != Worker.State.SUCCEEDED ) {
      return;
    }

    // Your logic here
  }
} );
webView.getEngine().getLoadWorker().stateProperty().addListener(
  (ObservableValue<? extends Worker.State> observable,
    Worker.State oldValue,
    Worker.State newValue) -> {
    if( newValue != Worker.State.SUCCEEDED ) {
      return;
    }

    // Your logic here
  } );
webview.getEngine().getLoadWorker().stateProperty().addListener(
  new ChangeListener<Worker.State>() {
    @Override
    public void changed(
                ObservableValue<? extends Worker.State> observable,
                Worker.State oldValue, Worker.State newValue) {
      switch (newValue) {
        case SUCCEEDED:
        case FAILED:
        case CANCELLED:
          webview
            .getEngine()
            .getLoadWorker()
            .stateProperty()
            .removeListener(this);
      }


      if (newValue != Worker.State.SUCCEEDED) {
        return;
      }

      // Your logic here
      System.out.println("page loaded");
    }
  } );