当前位置:  开发笔记 > Android > 正文

为什么JavaFX WebEngine getLoadWorker循环?

如何解决《为什么JavaFXWebEnginegetLoadWorker循环?》经验,为你挑选了0个好方法。

我不太确定怎么说这个问题,但我会试试.我的应用程序通过单击按钮对网站运行命令.问题是在每个循环期间getLoadWorker增加1.在加载工作器中我设置了监听器.下面是它的工作原理.

   MenuItem executeToHere = new MenuItem("Execute to here");
   executeToHere.setOnAction(new EventHandler() {
      @Override
      public void handle(ActionEvent event) {
            listViewStepItem item = stepListView.getSelectionModel().getSelectedItem();

            int selectedIndex = stepList.getSelectionModel().getSelectedIndex();

    WebBrowser browser = new WebBrowser(item.getWebView(), item.getListView());
        for(int i=0; i < selectedIndex; i++){
            listViewStepItem item2 = stepList.getItems().get(i);
            if(item2.comboBoxSelected.contains("http://")){
               browser.loadURL();
            } else if(item2.comboBoxSelected.contains("enter")){
               browser.enterText();
            } else if(item2.comboBoxSelected.contains("click")){
               browser.click();
            }
        }
            browser.setWorker();
     }
  });





public class WebBrowser{

   public WebBrowser(WebView fxmlWebView, WebEngine webEngine){
      this.view = fxmlWebView;
      this.engine = webEngine;
   }

    public void loadUrl(String url){
        webEngine.load(url);
    }

    public void enterText(){
        System.out.println("ENTER TEXT");
    }

    public void click(){
        System.out.println("click");
    }

    public void setWorker(){
        webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener(){
            public void changed(ObservableValue ov, State oldState, State newState){
                if(newState == javafx.concurrent.Worker.State.SUCCEEDED){

                    listener = new EventListener(){

                        public void handleEvent(org.w3c.dom.events.Event evt) {
                            eventListeners(evt);
                        }
                    };
                    setListenerByTagNames(listener, "a");
                }
            }
        });
    }

private void setListenerByTagNames(EventListener listener, String tagName){
    Document doc = webEngine.getDocument();
    NodeList elements = doc.getElementsByTagName(tagName);
    for(int i=0; i < elements.getLength();i++){
        ((EventTarget) elements.item(i)).addEventListener("click", listener, false);
    }
    System.out.println("Listening on :"+tagName);
}

}

我第一次运行它时输出看起来像这样

ENTER TEXT
click
Listening on : a

第二次

ENTER TEXT
click
Listening on : a
Listening on : a

第三次

ENTER TEXT
click
Listening on : a
Listening on : a
Listening on : a

我没有看到工作者如何增加,但它导致页面以某种方式重新加载/刷新,因此重置了对页面DOM的所有更改.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有