2013-12-15 182 views
0

我想爲Android編碼一個計時器,但我遇到處理程序的問題。此行:爲什麼此代碼拋出NullPointerException?

handler.post(new Runnable(){ 

...正在觸發NullPointerException。爲什麼?

public class HomeFragment extends Fragment { 

    private int stunde,minute,sekunde; 
    private TextView textfield; 
    private Button buttonStart,buttonStop; 
    private Handler handler; 
    private boolean Running = true; 
    private Runnable runnable; 
    private Thread thread; 



    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_home, container, false); 

     buttonStart =(Button) rootView.findViewById(R.id.button1); 
     buttonStop = (Button) rootView.findViewById(R.id.button2); 
     buttonStop.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       thread.stop(); 

      } 

     }); 
     textfield = (TextView) rootView.findViewById(R.id.startZeit); 





     buttonStart.setOnClickListener(new OnClickListener(){ 


      @Override 
      public void onClick(View v) { 
       Running = true; 
       runnable = new Runnable(){ 

        @Override 
        public void run() { 

         while(Running){ 
          try{ 

           Thread.sleep(1000); 
          } 
          catch(InterruptedException e){ 
           e.printStackTrace(); 
          } 
          handler.post(new Runnable(){ 


           @Override 
           public void run(){ 

            sekunde+=1; 


            if(sekunde == 60){ 
             minute +=1; 
             sekunde = 0; 
            }if(minute == 60){ 
             stunde +=1; 
            } 

            textfield.setText(String.format("%02d",stunde)+" : "+String.format("%02d", minute)+" : "+String.format("%02d",sekunde)); 



           } 


          }); 
         } 

        } 


       }; 
       thread = new Thread(runnable); 
      thread.start(); 
      handler = new Handler(); 



      } 

     }); 


     return rootView; 
    } 


}` 

回答

0

因爲您沒有初始化handler對象。所以你得到一個NullPointerException就可以了。

你需要做一些事情這樣的:

Handler handler = new Handler(); 

某處在你的代碼之前,你可以使用這個對象。

+0

我做到了,位於「thread.start();」之下。 - 你能告訴我在哪裏我需要初始化它嗎? – user3057253

+0

只需移動這一行:handler = new Handler();到另一個地方。在onCreateView開始的時候做好。或者更好的是把它放在onCreate方法中。 –

+0

感謝Emil,現在他告訴我java.lang.UnsupportedOperationException在thread.stop(); – user3057253

0

你的處理程序必須與

handler = new Handler(); 

使用之前它被實例化。

+0

我做到了,在「thread.start();」之下 – user3057253

+0

這就是問題所在。你必須這樣做。 – FWeigl

0

格式化很難閱讀,但如果可執行文件或處理程序尚未初始化,您將獲得NPE。由於您提供了一個新的可運行對象,這意味着您的處理程序尚未初始化。

我想你是在onClickListener中創建你的處理程序。嘗試在onCreate或onCreateView的頂部初始化它以清晰起見。

Goodluck

相關問題