2014-03-13 127 views
0

我需要知道如何等待事件被触发才能设置布尔值。我有2类简单的类:MainClass和等待类:等待事件

MainClass() 
    { 

     WebView wv; //It's already initialized from the xml and linked in the original code 
     Wait waiting = new Wait(); 
     if(waiting(wv,URL)) 
     { 
      wv.loadURL("javascript: ...."); 
     } 

    } 

    public Class Wait() 
    { 
     Boolean pageLoaded = false; 
     Wait waiting = this; 
     public boolean waitForPage(wv,URL) 
     { 

      wv.setWebViewClient(new WebViewClient() 
      { 

       public void onPageFinished(WebView webView, String url) 
       { 
        pageLoaded = true; 
        synchronized(waiting) 
        this.nothifyAll(); 

       } 

      }); 

      wv.loadURL(URL); 

      synchronized(this) // --> End up in an Endless Loop 
       this.wait(); 

      if(pageLoaded) 
       return true; 

      return false; 
     } 
    } 

有谁知道为什么它不会同步,终于在一个无限循环结束了?也许我使用错误的事件处理程序? this.wait();好像是一个While(true)验证布尔集由NoifyAll()。请一些想法,我如何等待这些事件,并保持程序流程,直到事件被解雇!

回答

0

synchronized(this)onPageFinished()方法内的thisWebViewClient例如,虽然在synchronized(this)thiswv.loadURL(URL)后指Wait实例。

考虑Android的java.util.concurrent包使用公用程序

+0

你说得对,我复制的代码不好,我deffinitly拿到了等待实例。 – DientesDeCheto

+0

谢谢,我会看看链接。但是直到我发现它对我和工作是否有用之前,还不能确定你的答案。 – DientesDeCheto

+0

而不是在类实例上同步,在监视器上同步。我不建议使用布尔值,因为它不可变,而是使用布尔值[1]。 –