bug:javafx webengine getelementbyid在一个线程内返回null

时间:2015-09-28 18:34:48

标签: java debugging webview javafx getelementbyid

编辑:添加了截图

我的javafx有问题。 我需要从文档中获取一个元素,但是当我在线程中编写此代码时,它会在getelementbyid上返回null

使用:

        scanprofilesbutton.setOnAction((ActionEvent e) -> {

        if (engine.getLocation().contains("events")) {
            if (engine.getDocument() == null) {
                System.out.println("null");
            }

            Element el = engine.getDocument().getElementById("nav-profile");
            System.out.println("You are logged in as " + el.getChildNodes().item(1).getChildNodes().item(1).getTextContent().trim());
        }            
    });

异常(java.lang.NullPointerException):

        scanprofilesbutton.setOnAction((ActionEvent e) -> {

        Thread thread = new Thread() {
            public void run() {
                while (true) {
                    if (engine.getLocation().contains("events")) {
                        if (engine.getDocument() == null) {
                            System.out.println("null");
                        }

                        Element el = engine.getDocument().getElementById("nav-profile");
                        Exception ->> System.out.println("You are logged in as " + el.getChildNodes().item(1).getChildNodes().item(1).getTextContent().trim());                         
                    } else {
                        break;
                    }
                    try {
                        Thread.sleep(5000);
                    } catch (Exception e) {
                    }
                }
            }
        };

        thread.start();
    });

我坚持这个,我没有找到任何解决方案。谢谢!

截图: enter image description here

1 个答案:

答案 0 :(得分:0)

或者:

1)engine.getDocument().getElementById("nav-profile")返回null,因此Element el为空。

OR

2)下面链式调用中的某些内容返回null,也许是您的.item(1)方法(您的意思是.item(0))?

el.getChildNodes().item(1).getChildNodes().item(1).getTextContent()

不是每五秒轮询一次,更好的解决方案是将监听器附加到加载工作程序,并仅检查网页何时成功加载。请参阅API example