2016-12-15 8 views
-1

웹 브라우저를 구축하려고하는데 웹 페이지를 가져 오기 위해 WebView를 사용하고 있습니다. 기록을 저장하기 위해 URL과 제목 이름을 모두 가져와야합니다. 내가 값을 인쇄두 arraylists의 값을 푸시하고 인쇄하는 순서 유지

private void currentScene() { 
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 

      WebView view = new WebView(); 
      engine = view.getEngine(); 

      engine.createPopupHandlerProperty(); 
      engine.titleProperty().addListener(new ChangeListener<String>() { 
       @Override 
       public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) { 
        SwingUtilities.invokeLater(new Runnable() { 
         @Override 
         public void run() { 
          if (newValue != null) { 
           //stores the title name in an arraylist 
           title.add(newValue); 
          } 
         } 

        }); 
       } 
      }); 

      engine.locationProperty().addListener(new ChangeListener<String>() { 
       @Override 
       public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) { 
        SwingUtilities.invokeLater(new Runnable() { 
         @Override 
         public void run() { 
          //stores the URL in another arraylist 
          titleUrl.add(newValue); 
          //sets the text of the location text field 
          locationTextField.setText(newValue); 
         } 
        }); 
       } 
      }); 

      jfxPanel.setScene(new Scene(view)); 
     } 
    }); 
} 

:

그래서 나는이 방법으로 시도

for (int i = 0; i < title.size(); i++) { 
      System.Out.Println(title.get(i)+" : "+titleUrl.get(i));   
     } 

을하지만 내 출력은 사람이 내게했던 말하십시오 수

Google : http://www.yahoo.com 
Yahoo : http://www.google.com 

같다 내가 잘못 됐니? 미리 감사드립니다.

+1

한다 (하나의 이벤트는 트리거 될 것이라는 경우는 없다) 2 리스너의 순서가 호출 된 경우 (예 : titleProperty 리스너가 항상 먼저 호출 됨) 두 번째 리스너에서 첫 번째리스 트의 길이를 확인하고 첫 번째 리스너의 목록이 1 요소만큼 크면 항목을 추가 할 수 있습니다 두 번째 청취자 목록에서. – Hani

+0

답변에 표시해 주실 수 있습니까? – IAmBlake

답변

1

두 명의 청취자가 호출되는 순서를 알고 있으면 (예 : titleProperty 수신기가 항상 먼저 호출 됨) 두 번째 수신기에서 첫 번째 수신기의 길이를 확인하고 첫 번째 수신기의 목록이 첫 번째 리스너는 여기

항상) 따라서이 솔루션은 두 조건이

1

을 충족하는 경우 작동 솔루션

if (title.size() == titleUrl.size() + 1) { 
     titleUrl.add(newValue); 
    } 

의 중요한 부분입니다 두 번째 리스너의 목록에서 한 요소에 의해 더 큰 두 사건 모두 해고된다. 당신이 알고있는 경우

2) 다음 순서의 TitleProperty입니다 리스너 locationProperty 리스너 여기

에서 항상 이벤트 화재 모두 전체 코드

private void currentScene() { 
     Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 

       WebView view = new WebView(); 
       engine = view.getEngine(); 

       engine.createPopupHandlerProperty(); 
       engine.titleProperty().addListener(new ChangeListener<String>() { 
        @Override 
        public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) { 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           if (newValue != null) { 
            //stores the title name in an arraylist 
            title.add(newValue); 
           } 
          } 

         }); 
        } 
       }); 

       engine.locationProperty().addListener(new ChangeListener<String>() { 
        @Override 
        public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) { 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           //stores the URL in another arraylist 
           if (title.size() == titleUrl.size() + 1) { 
            titleUrl.add(newValue); 
           } 
           //sets the text of the location text field 
           locationTextField.setText(newValue); 
          } 
         }); 
        } 
       }); 

       jfxPanel.setScene(new Scene(view)); 
      } 
     }); 
    } 
+0

고마워요! 그것은 내가 찾고있는 해결책이다 :) – IAmBlake