I'm trying to develop a game in android studio, but when I change activities the game crashes.The logcat says: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference.It also says that I have a problem with the Display.java file at the line 51.
display.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".Display"><Button android:id="@+id/menuButton" android:layout_width="137dp" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:text="MENU" android:textStyle="bold|italic" android:visibility="invisible" /><ImageView android:id="@+id/bg" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@android:color/white" /><TextView android:id="@+id/text_view_countdown" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="00:00" android:textColor="@android:color/black" android:textSize="60sp" android:visibility="invisible"/><Button android:id="@+id/button_start_pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/text_view_countdown" android:layout_centerHorizontal="true" android:text="start" android:visibility="invisible"/><Button android:id="@+id/button_reset" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/text_view_countdown" android:layout_marginStart="11dp" android:onClick="tryagain" android:layout_toEndOf="@+id/button_start_pause" android:text="reset" android:visibility="invisible" tools:visibility="visible" /><Button android:id="@+id/settingsButton" android:layout_width="250dp" android:layout_height="50dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="356dp" android:text="SETTINGS" android:textSize="25sp" android:textStyle="bold|italic" /><!-- tools:visibility="visible"--><!-- tools:visibility="visible"--><Button android:id="@+id/playButton" android:layout_width="250dp" android:layout_height="50dp" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginStart="81dp" android:layout_marginLeft="81dp" android:layout_marginTop="225dp" android:text="PLAY" android:textSize="25sp" android:textStyle="bold|italic" /><Button android:id="@+id/leaderButton" android:layout_width="250dp" android:layout_height="50dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="288dp" android:text="LEADERBOARD" android:textSize="25sp" android:textStyle="bold|italic" /><com.airbnb.lottie.LottieAnimationView android:id="@+id/lottieAnimationView" android:layout_width="match_parent" android:layout_height="246dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:layout_centerHorizontal="true" android:layout_marginStart="-1dp" android:layout_marginTop="3dp" android:layout_marginEnd="-1dp" android:visibility="invisible" app:lottie_autoPlay="true" app:lottie_fileName="tryagain.json" app:lottie_loop="true" /><com.airbnb.lottie.LottieAnimationView android:id="@+id/lottieAnimationViewWin" android:layout_width="match_parent" android:layout_height="246dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:layout_marginStart="1dp" android:layout_marginTop="2dp" android:layout_marginEnd="-3dp" android:visibility="invisible" app:lottie_autoPlay="true" app:lottie_fileName="win.json" app:lottie_loop="true" /><com.airbnb.lottie.LottieAnimationView android:id="@+id/lottieAnimationViewTimesUp" android:layout_width="match_parent" android:layout_height="246dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:layout_marginStart="-3dp" android:layout_marginTop="0dp" android:layout_marginEnd="0dp" android:visibility="invisible" app:lottie_autoPlay="true" app:lottie_fileName="timesup.json" app:lottie_loop="true" /><!-- tools:visibility="visible"--></RelativeLayout>
Display.java
package com.example.testpaz;import android.app.Activity;import android.graphics.Color;import android.media.MediaPlayer;import android.os.Bundle;import android.os.CountDownTimer;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import com.airbnb.lottie.LottieAnimationView;import java.util.Locale;public class Display extends Activity { private static final long START_TIME_IN_MILLIS = 10000; private static final long NEGATIVE_TIME_IN_MILLIS = 5000; private long NegativeTimeInMillis = NEGATIVE_TIME_IN_MILLIS; private TextView mTextViewCountDown; private Button mButtonStartPause; private Button mButtonReset; private CountDownTimer mCountDownTimer; private LottieAnimationView tryAgainAnim; private LottieAnimationView winAnim; private LottieAnimationView timesUpAnim; private boolean mTimerRunning; private long mTimeLeftInMillis = START_TIME_IN_MILLIS; private ImageView bg; private Button playB; private Button settB; private Button leaderB; private Button menuB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bg = findViewById(R.id.bg); tryAgainAnim = findViewById(R.id.lottieAnimationView); winAnim = findViewById(R.id.lottieAnimationViewWin); timesUpAnim = findViewById(R.id.lottieAnimationViewTimesUp); mTextViewCountDown = findViewById(R.id.text_view_countdown); mButtonStartPause = findViewById(R.id.button_start_pause); mButtonReset = findViewById(R.id.button_reset); playB = findViewById(R.id.playButton); settB = findViewById(R.id.settingsButton); leaderB = findViewById(R.id.leaderButton); menuB = findViewById(R.id.menuButton); menuB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { backToMenu(); } }); playB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startGame(); } }); mButtonStartPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mTimerRunning) { pauseTimer(); } else { startTimer(); } } }); mButtonReset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resetTimer(); } }); updateCountDownText(); } private void backToMenu(){ menuB.setVisibility(View.INVISIBLE); playB.setVisibility(View.VISIBLE); settB.setVisibility(View.VISIBLE); leaderB.setVisibility(View.VISIBLE); mTextViewCountDown.setVisibility(View.INVISIBLE); mButtonStartPause.setVisibility(View.INVISIBLE); mButtonReset.setVisibility(View.INVISIBLE); timesUpAnim.setVisibility(View.INVISIBLE); tryAgainAnim.setVisibility(View.INVISIBLE); winAnim.setVisibility(View.INVISIBLE); } private void startGame(){ menuB.bringToFront(); menuB.setVisibility(View.VISIBLE); playB.setVisibility(View.INVISIBLE); settB.setVisibility(View.INVISIBLE); leaderB.setVisibility(View.INVISIBLE); mTextViewCountDown.setVisibility(View.VISIBLE); mButtonStartPause.setVisibility(View.VISIBLE); } private void startTimer() { final MediaPlayer alarmSound = MediaPlayer.create(this,R.raw.alarm_sound); mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 10) { @Override public void onTick(long millisUntilFinished) { mTimeLeftInMillis = millisUntilFinished; updateCountDownText(); } @Override public void onFinish() { bg.setBackgroundColor(Color.rgb(255, 255, 255)); alarmSound.start(); timesUpAnim.setVisibility(View.VISIBLE); mTimerRunning = false; mButtonStartPause.setText("Start"); mButtonStartPause.setVisibility(View.INVISIBLE); mButtonReset.setVisibility(View.VISIBLE); } }.start(); mTimerRunning = true; mButtonStartPause.setText("Stop"); mButtonReset.setVisibility(View.INVISIBLE); tryAgainAnim.setVisibility(View.INVISIBLE); winAnim.setVisibility(View.INVISIBLE); } private void pauseTimer() { final MediaPlayer victSound = MediaPlayer.create(this,R.raw.vicory_sound); final MediaPlayer failSound = MediaPlayer.create(this,R.raw.fail_sound); mCountDownTimer.cancel(); mTimerRunning = false; mButtonStartPause.setText("Start"); mButtonReset.setVisibility(View.VISIBLE); bg.setBackgroundColor(Color.rgb(255, 255, 255)); if (mTimeLeftInMillis >= 4990 && mTimeLeftInMillis <= 5010){ winAnim.setVisibility(View.VISIBLE); victSound.start(); }else{ tryAgainAnim.setVisibility(View.VISIBLE); failSound.start(); } } private void resetTimer() { mTimeLeftInMillis = START_TIME_IN_MILLIS; updateCountDownText(); timesUpAnim.setVisibility(View.INVISIBLE); tryAgainAnim.setVisibility(View.INVISIBLE); winAnim.setVisibility(View.INVISIBLE); mButtonReset.setVisibility(View.INVISIBLE); mButtonStartPause.setVisibility(View.VISIBLE); } private void updateCountDownText() { //int minutes = (int) (mTimeLeftInMillis / 1000) / 60; String timeLeftFormatted; int seconds = Math.abs((int) ((mTimeLeftInMillis - NegativeTimeInMillis) / 1000) % 60); int centiSec = Math.abs((int) ((mTimeLeftInMillis - NegativeTimeInMillis) / 10) % 100); if (mTimeLeftInMillis <= 7000 && mTimeLeftInMillis >= 5000){ bg.setBackgroundColor(Color.rgb(0, 0, 0)); } if(mTimeLeftInMillis >= 5000){ timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", seconds, centiSec); }else{ timeLeftFormatted = String.format(Locale.getDefault(), "-%02d:%02d", seconds, centiSec); } mTextViewCountDown.setText(timeLeftFormatted); }}
Logcat:
-03-29 12:14:36.008 10868-10868/com.example.testpaz E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.testpaz, PID: 10868 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testpaz/com.example.testpaz.Display}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.example.testpaz.Display.onCreate(Display.java:51) at android.app.Activity.performCreate(Activity.java:8000) at android.app.Activity.performCreate(Activity.java:7984) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)