我使用以下代码在Java和Javascript对象之间进行通信。
find.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("clickController", new WebViewController());
webEngine.executeScript("var element = document.evaluate(clickController.getXpath(), document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;"+
"clickController.printId(element, \"sad\");"+
"if (element != null) {"+
"element.style.backgroundColor = \"#FDFF47\";"+
"}");
}
});
public void printId(Object object, String returnValue) {
// System.out.println(returnValue);
AttributesModel model = new AttributesModel();
if (org.w3c.dom.html.HTMLElement.class.isAssignableFrom(object.getClass())) {
org.w3c.dom.html.HTMLElement it = (org.w3c.dom.html.HTMLElement) object;
model.setId(it.getId());
model.setValue(it.getAttribute("value"));
model.setName(it.getAttribute("name"));
model.setCls(it.getClassName());
model.setLink(it.getTextContent());
model.setTag(it.getTagName());
model.setXpath(returnValue);
}
System.out.println(model.toString());
}
public String getXpath(){
return xpath.getText();
}
printId()
和getXpath()
方法包含在名为WebViewController
的类中。我点击了&#34;查找&#34;其余代码执行的按钮。
clickController.printId()
工作正常。问题出在clickController.getXpath()
上。我无法使用它获取xpath值。当我直接指定xPath时,它可以工作。但是我将在运行时从用户那里获得Xpath。所以我需要调用getXpath()
方法。执行时,浏览器崩溃。我哪里错了?请帮忙。