2011-02-17 5 views
2

내가 시작할 때 몇 가지 파일을 바로 다운로드해야하는 탭 레이아웃 응용 프로그램이 있으므로 onCreate 메서드의 Main.java 파일에서 다음을 호출합니다.스레드가 끝나고 dialog.dismiss()를 호출하면 WindowLeaked 예외가 발생합니다.

 myProgressDialog = ProgressDialog.show(Controller.this, 
       "Please wait...", "Doing Extreme Calculations...", true); 
    downloadFile(NAME_LOCAL, NAME_SERVER, true); 

downloadFile은 다음과 같이 보이는 별도의 스레드입니다.

 protected void downloadFile(final String localFilePath, final String remoteFileName, final boolean ASCII) { 

      // Fire off a thread to do some work that we shouldn't do directly in the UI thread 

      Thread a = new Thread() { 
       public void run() { 


        Logger.setLevel(Level.DEBUG); 


         try{ 
          //create client 
          log.info("Creating Client"); 
          ftp = new FileTransferClient(); 
          log.info("Setting Remote Host"); 
          ftp.setRemoteHost(host); 
          ftp.setUserName(username); 
          ftp.setPassword(password); 
          //connect. . .We hope 
          log.info("Connecting to server " + host); 
          ftp.connect(); 
          ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV); 
          if(ASCII){ 
          ftp.setContentType(FTPTransferType.ASCII); 
          Log.d("ASCII", "USING ASCII"); 
          }else if(!ASCII){ 
           Log.d("BINARY", "USING BINARY"); 
           ftp.setContentType(FTPTransferType.BINARY); 

          } 

          ftp.downloadFile(cache + localFilePath , remoteFileName); 

         }catch (Exception e){ 
          e.printStackTrace(); 

         } 





        mHandler.post(mUpdateResults); 
        Handler handler=new Handler(); 
        handler.post(new Runnable(){public void run(){myProgressDialog.dismiss();}}); 

       } 
      }; 
      a.start(); 

     } 

로그 고양이에서 다운로드가 시작되고 갑자기 끝납니다.

02-17 17:27:51.175: ERROR/WindowManager(2523): Activity org.IRE.toolbox.Controller has leaked window [email protected] that was originally added here 

02-17 17:27:51.175: ERROR/WindowManager(2523): android.view.WindowLeaked: Activity org.IRE.toolbox.Controller has leaked window [email protected] that was originally added here 

무슨 일이에요?! 미리 감사드립니다!

+0

코드를 약간 맞춰서 (올바른 들여 쓰기) 탭을 변경하면 알려주십시오. 다운로드가 시작되거나 무엇을하는지 ... btw : 다운로드를 위해 ASyncTask를 사용하는 것이 좋습니다 ... – WarrenFaith

답변

1

코드에서 Thread.run()에서 예외를 발생하는 것입니다 :

Handler handler=new Handler(); 

이유는 스레드가 Looper.prepare라고하지 않은 것입니다. 아마도 "강제 종료"메시지가 나타나고 로그를 파헤 치면 다음과 같은 메시지를 볼 수 있습니다.

ERROR/AndroidRuntime(1161): Uncaught handler: thread Thread-9 exiting due to uncaught exception 
ERROR/AndroidRuntime(1161): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
ERROR/AndroidRuntime(1161):  at android.os.Handler.<init>(Handler.java:121) 
+0

감사합니다! 그것은 일했다 :) –

관련 문제