2017-03-25 14 views
0

我想在java中使用w3c.dom.events來處理按鈕上的單擊事件,但我得到錯誤「無法對非靜態方法addEventListener進行靜態引用」請幫助我out.Here是我的代碼。action在webview中w3c dom的監聽事件

Node button = form.getElementsByTagName("button").item(0); 
          if(button!=null && button.hasAttributes()){ 
           NamedNodeMap attr = button.getAttributes(); 
           for(int j=0; j<attr.getLength(); j++){ 
            Attr atribute = (Attr)attr.item(j); 
            if(atribute.getValue().equals("submit")){ 
             System.out.println("submit button detected."); 
             org.w3c.dom.events.EventListener listener = new org.w3c.dom.events.EventListener(){ 
              @Override 
              public void handleEvent(org.w3c.dom.events.Event evt) { 
               System.out.println("this is a action listener."); 
              } 

             }; 
             ((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); //here i am getting the error 

            } 

          } 
         } 

回答

0

您收到「不能讓靜態引用一個不靜態方法的addEventListener」的錯誤意味着: 方法:addEventListener不是一個靜態方法 - 這意味着你不能從它的類直接調用它,您需要創建一個實現「EventTarget」的對象來調用它。

((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); 

因此,如果我們打破這行代碼,我們有:一個類型轉換稱爲「按鈕」的對象:(EventTarget)button,其次是另一種類型的投射到任何方法調用addEventListener回報(無效)。所以基本上,計算機看到的是你在EventTarget接口中調用方法addEventListener(這是不可能的,因爲方法不是靜態的,你不能直接從類/接口調用它),並且你正在類型轉換它以鍵入EventTarget。 注意:接口中的靜態方法不能存在。

爲了解決這個問題只需要使用您的按鈕對象創建添加Eventlistener

((EventTarget)button).addEventListener("click", listener, false); 

因此,在這種情況下,你的類型轉換按鈕的事件目標。請注意0​​,它將允許您現在將Event Listener添加到對象(按鈕)。

+0

有一些進口問題,我解決了感謝您的幫助。 – captainchhala

0

進口存在問題。這是我解決和修改的代碼。

`public class DetectForm { 
    private HTMLInputElement password = null; 
    private HTMLInputElement username = null; 
    private boolean isForm = false; 
    public void detect(Document doc){ 


     if (doc!=null && doc.getElementsByTagName("form").getLength() > 0) { 
      HTMLFormElement form = (HTMLFormElement) doc.getElementsByTagName("form").item(0); 
      NodeList nodes = form.getElementsByTagName("input"); 

      for (int i = 0; i < nodes.getLength(); i++) { 
       if(nodes.item(i).hasAttributes()){ 
        NamedNodeMap attr = nodes.item(i).getAttributes(); 
        for (int j=0 ; j<attr.getLength();j++){ 
         Attr atribute = (Attr)attr.item(j); 
         if(atribute.getValue().equals("password")){ 
          System.out.println("Password detected"); 
          password = (HTMLInputElement) nodes.item(i); 
          username = (HTMLInputElement) nodes.item(i-1); 
          //       password.setValue("helloword"); 
          //       username.setValue("helloword"); 
          isForm = true; 
         } 
        } 
       } 

      } 

      EventListener listener = new EventListener() { 
       @Override 
       public void handleEvent(Event evt) { 
        System.out.println("action listener from DOM."); 
        if(username!=null && password!=null){ 
         String user = username.getValue(); 
         String pass = password.getValue(); 
        } 


       } 
      }; 
      if(isForm){ 
       Node button = form.getElementsByTagName("button").item(0); 
       if(button!=null && button.hasAttributes()){ 
        NamedNodeMap attr = button.getAttributes(); 
        for(int j=0; j<attr.getLength(); j++){ 
         Attr atribute = (Attr)attr.item(j); 
         if(atribute.getValue().equals("submit")){ 
          System.out.println("submit button detected."); 
          ((EventTarget) button).addEventListener("click", listener, false); 

         } 

        } 
       } 
      } 

     } 




    } 

} 
`