2017-09-20 18 views
1

'front'というボタンが押されるたびに、他のボタンはすべてGreenButtonに等しいボタンを除いて灰色に変わるようにプログラムを作成しようとしています。私は、forループのボタンにアクセスすることに苦労しており、nullポインタの例外が発生し続ける。ボタンの配列からボタンを変更する

フルlogcatは、NPEは、私がループ内で配列にアクセスしようとしていたときに発生していることを示す、以下のようになり

09-20 11:50:54.727 5302-5302/com.example.kshah.movingbutton E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.kshah.movingbutton, PID: 5302 
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setBackgroundColor(int)' on a null object reference 
     at com.example.kshah.movingbutton.MainActivity$1.onTouch(MainActivity.java:108) 
     at android.view.View.dispatchTouchEvent(View.java:9296) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) 
     at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403) 
     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737) 
     at android.app.Activity.dispatchTouchEvent(Activity.java:2771) 
     at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69) 
     at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364) 
     at android.view.View.dispatchPointerEvent(View.java:9520) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5922) 
     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5896) 
     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5857) 
     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6025) 
     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
     at android.os.MessageQueue.nativePollOnce(Native Method) 
     at android.os.MessageQueue.next(MessageQueue.java:323) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

CODE:

public class MainActivity extends AppCompatActivity { 

    private Button front; 
    private Button a; 
    private Button b1; 
    private Button b2; 
    private Button b3; 
    private Button b4; 

    Button[] buttons = {front,a,b1,b2,b3,b4}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    front = (Button) findViewById(R.id.front); 
    a = (Button) findViewById(R.id.a); 
    b1 = (Button) findViewById(R.id.b1); 
    b2 = (Button) findViewById(R.id.b2); 
    b3 = (Button) findViewById(R.id.b3); 
    b4 = (Button) findViewById(R.id.b4); 

    front.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent event) { 
       Button GreenButton = b3; 
      for(int i = 0; i <= buttons.length; i++) { 
       if (buttons[i] == b3) { 
        buttons[i].setBackgroundColor(Color.GREEN); 
       } 
       else 
        buttons[i].setBackgroundColor(Color.GRAY); 
      } 
      return false; 
     } 
    }); 
    } 
} 
+0

エラーの完全なログを投稿してください。 –

+0

@Pavneet_Singhは、上記のエラーで示されたヌルポインタの例外につながっているため、 'for(int i = 0; i ", false) });