运行应用程序后模拟器中的意外应用程序崩溃

Posted

技术标签:

【中文标题】运行应用程序后模拟器中的意外应用程序崩溃【英文标题】:Unexpected App Crash in Emulator after Runing App 【发布时间】:2021-09-16 19:58:03 【问题描述】:

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

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

这是我得到的错误

E/SensorManager:异常调度输入事件。 D/AndroidRuntime:关闭虚拟机 E/AndroidRuntime: 致命异常: main 进程: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(本机方法) 在 android.os.MessageQueue.next(MessageQueue.java:335) 在 android.os.Looper.loop(Looper.java:183) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

这是我的 java 文件源代码

public class Game extends Activity 实现 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);
    

【问题讨论】:

这能回答你的问题吗? What is a NullPointerException, and how do I fix it? Button btnull,是放在R.layout.highscore2里面吗? 感谢您回答我的问题。我已经尝试过你们的解决方案,我对我的 xml 文件上的按钮链接部分不小心。我的程序现在运行得更好,没有错误。 【参考方案1】:

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

【讨论】:

感谢您的帮助,这个解决方案确实有效。我在未包含正确按钮 ID 的 xml 文件部分上犯了一个错误。

以上是关于运行应用程序后模拟器中的意外应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

点击提交按钮后程序崩溃

应用程序启动后立即崩溃

Spritekit 应用程序在设备上运行时崩溃,在 swift 3 转换后在模拟器上工作

由于找不到 FileProvider 类,在模拟器上重新安装后应用程序崩溃

任何模拟器崩溃后都需要重新启动 XCode

应用程序在模拟器中运行良好,但在 iphone 中崩溃