2016-06-27 26 views
-3

我是Android開發新手。我不知道爲什麼它會在那裏拋出一個NullPointerException,如果我沒有在那裏放置一個斷點的話。只有當我沒有放置斷點時,Android纔會拋出NullPointerExpception

Button btnFtpDownload = (Button) this.findViewById(R.id.downloadFtpButton); 
    if (btnFtpDownload != null){ 
     btnFtpDownload.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       Log.d(TAG,"Download click"); 
       Message msg = new Message(); 
       downloader.start(); 
       msg.obj = "start"; 
       downloader.mHandler.sendMessage(msg); //throws a NullPointerException if no breakpoint there 
      } 
     }); 
    } 

錯誤:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage(android.os.Message)' on a null object reference 

UPDATE

downloader是Thread類的一個瞬間。 Link到codehare.io中的類(因爲它是一個非常長的類,所以Stack Overflow不允許我在這裏發佈)

+3

發佈您定義下載程序的代碼。 –

+1

看起來像一個競爭條件。 'downloader' init可能發生在另一個線程上,並且不會完成,除非添加斷點來暫停當前線程。 – laalto

回答

2

它這樣做是因爲'下載器'確實異步工作。如果你設置斷點,程序凍結主線程,但後臺線程繼續運行,當你按下下一步按鈕,對象就緒。但是,如果程序運行時沒有斷點(更快),則實例爲空,因此拋出異常。

+0

你對解決這個問題有什麼建議? –

+0

發佈更多關於'downloader'的代碼也許有一些'onReady'回調,你可以這樣做 –

+0

這裏是 https://codeshare.io/eZd3V –

相關問題