首页 > 解决方案 > 运行应用程序后模拟器中的意外应用程序崩溃

问题描述

我是 Android Studio 的初学者,最近我的讲座给了我一个实验室任务来创建一个简单的游戏。这是输出。

在此处输入图像描述

这是我的输出。球落地时我的应用程序崩溃

在此处输入图像描述

这是我得到的错误

E/SensorManager:异常调度输入事件。D / AndroidRuntime:关闭VM E / AndroidRuntime:致命异常:主进程:com.example.myapplication,PID:31130 java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Button.setOnClickListener(android.view .View$OnClickListener)' 在 com.example.myapplication.Game.onSensorChanged(Game.java:127) 上的空对象引用上 android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:837) 在 android.os。 MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loop(Looper.java:183) at android.app.ActivityThread.main(ActivityThread.java: 7656) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller 的 java.lang.reflect.Method.invoke(Native Method)。

这是我的 java 文件的源代码

公共类游戏扩展活动实现 SensorEventListener {

ImageView im;
ImageView im2;
int i = 0, j = 0;
SensorManager mSensorManager;
Sensor mSensor;
float m, n, b, v;
int vel = 10, vel2 = 10, z = 8, c = 8, f = 0, g = 0;
float k = 0;
boolean data = true, data2 = true;
MediaPlayer mp, mp2;
TextView tv, tv2;
SharedPreferences sharedPref;
SharedPreferences.Editor editor;
Context context = this;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);
    sharedPref = Game.this.getSharedPreferences("xyz", Context.MODE_PRIVATE);
    editor = sharedPref.edit();
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    im = (ImageView) findViewById(R.id.imageView9);
    im2 = (ImageView) findViewById(R.id.imageView8);
    mp = MediaPlayer.create(this, R.raw.collision);
    mp2 = MediaPlayer.create(this, R.raw.toing);
    tv = (TextView) findViewById(R.id.tv1);
    tv2 = (TextView) findViewById(R.id.tv2);
    m = im2.getX();
    n = im2.getY();
}

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    float axisX = event.values[0];
    float axisY = event.values[1];
    float axisZ = event.values[2];

    b = im.getX();
    v = im.getY();

    if (axisX > 0 && m > 30) {
        if (data) {
            im2.setRotation(-10);
            data2 = true;
            data = false;
        }
        m = m - 20;
        im2.setX(m);
        z--;
        if (z == 0) {
            im2.setRotation(0);
            z = 8;
        }
    }
    if (axisX < 0 && m < 560) {
        if (data2) {
            im2.setRotation(10);
            data = true;
            data2 = false;
        }
        m = m + 20;
        im2.setX(m);
        c--;
        if (c == 0) {
            im2.setRotation(0);
            c = 8;
        }
    }
    if (b >= m - 60 && b <= m + 100 && v >= 870 && v <= 880) {
        vel2 = -vel2;
        if (sharedPref.getInt("y", 0) == 1) {
            mp.start();
        }
        f++;
        tv.setText(MessageFormat.format("Score:{0}", f));
    }
    if (b <= 42) {
        vel = 10;
    }
    if (v <= 52) {
        vel2 = 10;
    }
    if (b >= 592) {
        vel = -vel;
    }
    if (v >= 1002) {
        b = 592 / 2;
        v = 1002 / 2;

        if (sharedPref.getInt("x", 0) == 1) {
            mp2.start();
        }
        if (f >= sharedPref.getInt("HiScore", 0)) {
            final Dialog dialog = new Dialog(context);
            dialog.setContentView(R.layout.highscore2);
            dialog.setTitle("Yeah High Score");
            final EditText et = (EditText) dialog.findViewById(R.id.editText1);
            Button bt = (Button) dialog.findViewById(R.id.button1);
            dialog.show();

            bt.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    editor.putString("Name", String.valueOf(et.getText()));
                    editor.commit();
                    dialog.dismiss();
                }
            });

            editor.putInt("HiScore", f);
            editor.commit();
        }

        f = 0;
        tv.setText(MessageFormat.format("Score:{0}", String.valueOf(f)));
        tv2.setText(MessageFormat.format("Foul:{0}", String.valueOf(g)));
    }
    b = b + vel;
    v = v + vel2;
    im.setX(b);
    im.setY(v);
    im.setRotation(k);
    k += 1;
}

@Override
// TODO Auto-generated method stub
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

protected void onResume()
    { // Register a listener for the sensor.
        super.onResume();
        mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
    protected void onPause()
    {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }
}

标签: android

解决方案


检查 xml 中按钮的引用并使用正确的 id 并检查您是否在按钮的活动中绑定了相同的内容。它没有找到按钮 id 引用,因为它没有正确绑定。


推荐阅读