2013-12-15 4 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, 이제 그는 thread.stop()에서 java.lang.UnsupportedOperationException을 말하고 있습니다. 어떤 라인에서 – user3057253

0

당신의 핸들러가 사용 전에

handler = new Handler(); 

인스턴스화해야합니다.

+0

"thread.start(); 아래에 있습니다. – user3057253

+0

그게 문제입니다. 전에 해줘야 해. – FWeigl

0

서식을 읽기가 어렵지만 실행 파일이나 처리기가 초기화되지 않은 경우 NPE가 표시됩니다. 새로운 실행 객체를 제공하고 있기 때문에 핸들러가 초기화되지 않았다는 의미입니다.

난 당신이 onClickListener 안에 처리기를 만드는 것 같아요. 명확하게하기 위해 onCreate 또는 onCreateView의 맨 위로 초기화 해보십시오.

Goodluck

관련 문제