我不太确定怎么说这个问题,但我会试试.我的应用程序通过单击按钮对网站运行命令.问题是在每个循环期间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的所有更改.