Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx webengine执行javascript时出现任意错误_Java_Javafx 2 - Fatal编程技术网

Javafx webengine执行javascript时出现任意错误

Javafx webengine执行javascript时出现任意错误,java,javafx-2,Java,Javafx 2,我在swing应用程序上运行javafx 2.2.5的webengine时遇到问题,所以我想用webengine登录易趣,我可以做到,问题是有时候它在执行单击时会抛出javascript错误。这只是一小部分时间,通常可以正常工作。 让我们这样说: final StackPane root = new StackPane(); WebView browser = new WebView(); WebEngine webEngine = browser.getEngine(); final

我在swing应用程序上运行javafx 2.2.5的webengine时遇到问题,所以我想用webengine登录易趣,我可以做到,问题是有时候它在执行单击时会抛出javascript错误。这只是一小部分时间,通常可以正常工作。 让我们这样说:

 final StackPane root = new StackPane();
 WebView browser = new WebView();
 WebEngine webEngine = browser.getEngine();
 final String url ="https://signin.ebay.co.uk/ws/eBayISAPI.dll?SignIn";
 //load the url
 webEngine.load(url);
 final Scene scene = new Scene(root, 500, 400);
 root.getChildren().add(browser);
 //addlistener for state
  webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {              
            Worker.State state = (Worker.State)t1;

            if(state==Worker.State.SUCCEEDED){
                         Document doc = webEngine.getDocument();
                         Element u = (Element) doc.getElementById("userid");
                         u.setAttribute("value", username);
                         Element p = (Element)doc.getElementById("pass");
                         p.setAttribute("value", pass);
            //now execute the click, as the load succeeded the button should be clickable
            webEngine.executeScript("document.getElementById('but_sgnBt').click()");
            }   
}
}); 
大多数时候它都能正常工作,但有时由于未知的原因,它不能正常工作,我也尝试了一些变体,看看是否可以重新加载页面并重试,但每次它第一次出现错误时,其他调用(如reload()和load())都会继续出现相同的问题。 我试着这样做:

final StackPane root = new StackPane();
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
String url ="https://signin.ebay.co.uk/ws/eBayISAPI.dll?SignIn";
//load the url
webEngine.load(url);
 final Scene scene = new Scene(root, 500, 400);
root.getChildren().add(browser);
//addlistener for state
 webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {              
            Worker.State state = (Worker.State)t1;

            if(state==Worker.State.SUCCEEDED){

                         Document doc = webEngine.getDocument();
                         Element u = (Element) doc.getElementById("userid");
                         u.setAttribute("value", username);
                         Element p = (Element)doc.getElementById("pass");
                         p.setAttribute("value", pass);
            //now execute the click, as the load succeeded the button should be clickable
            try{
            webEngine.executeScript("document.getElementById('but_sgnBt').click()");
           }catch(Exception ex){
            webEngine.getLoadWorker().cancel();
            //with both is the same outcome
            //  webEngine.reload();
                webEngine.load(url);
           }
            }   
}
}); 
这样,如果第一次javascript执行失败,代码将继续循环,加载成功并抛出错误。无论如何,我尝试睡眠线程以查看问题是否是页面未完全加载,但这似乎不是问题,因为我可以看到状态成功时页面加载正确。 我花了相当多的时间在这方面,现在我没有更多的想法如何解决这个问题,甚至是什么问题,最糟糕的是,我必须尝试运行代码几次,直到我得到错误,这使得调试更加困难

所讨论的错误是:

netscape.javascript.JSException:TypeError:“null”不是com.sun.webpane.platform.WebPage.twkExecuteScript(本机方法)上的对象

那么我的问题是,有人知道为什么会发生这种情况吗? 还是解决这个问题的方法


非常感谢

您是否有提及javascript错误的堆栈跟踪或错误消息?@Sergey Yes,netscape.javascript.JSException:TypeError:“null”不是com.sun.webpane.platform.WebPage.twkExecuteScript(本机方法)中的对象,我认为这是因为页面没有真正加载,所以javascript的执行失败,但我不是javascrip方面的专家。我找到了一个解决方案,但仍然想要其他解决方案。我的解决方案包括,如果浏览器登录失败(javascript),我基本上会销毁该实例并创建一个新实例,90%的时间都很好,这应该可以,但不是javafx解决方案,也不是很漂亮。更新,虽然我创建了一个新实例,但没有解决方法,仍然是一样的。在本例中,webbrowser包含在JFrame中。。