You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MainActivity无法访问GamePanel变量,遇空对象引用异常求助

问题原因分析
  1. 空对象引用核心原因:MainActivity中声明的gamePanel成员变量仅做了声明,未实际赋值。你在onCreate里调用setContentView(new GamePanel(this))时,只是创建了GamePanel实例并设置为界面,但没有把这个实例赋值给gamePanel变量,导致onActivityResult中gamePanel为null,调用gamePanel.images时触发空指针异常。
  2. 变量访问问题:images是protected修饰符,若MainActivity和GamePanel在同一个包下,其实是可以直接访问的;如果不在同包,则会无法访问。不过当前核心问题是空指针,先解决这个,再优化访问方式。
分步解决方案

1. 修复空指针异常

修改MainActivity的onCreate方法,将创建的GamePanel实例赋值给成员变量:

@Override
protected void onCreate(Bundle savedInstanceState) {
    //some code
    gamePanel = new GamePanel(this); // 先实例化并赋值给成员变量
    setContentView(gamePanel); // 再设置为界面

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 100);

    //some code
}

2. 优化变量访问(更规范的封装写法)

直接访问protected变量虽然可行,但不符合面向对象的封装原则,建议在GamePanel中添加公共方法来操作images集合:

public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
    //some code

    protected ArrayList<Bitmap> images;

    public GamePanel(Context context) {
        super(context);
        images = new ArrayList<>();
    }

    // 添加公共方法用于添加图片
    public void addImage(Bitmap bitmap) {
        if (bitmap != null) {
            images.add(bitmap);
            // 如果需要刷新界面,可以在这里调用相关绘制方法
        }
    }

    //some code
}

然后在MainActivity的onActivityResult中调用这个方法:

if (requestCode == 100) {
    Bitmap captureImage = (Bitmap) data.getExtras().get("data");
    gamePanel.addImage(captureImage); 
}

3. 额外防坑处理

检查data和data.getExtras()是否为null,避免额外空指针:

if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
    Bundle extras = data.getExtras();
    if (extras != null) {
        Bitmap captureImage = (Bitmap) extras.get("data");
        gamePanel.addImage(captureImage); 
    }
}

注:相机拍照返回的data.get("data")仅为缩略图,如果需要获取原图,需指定拍照文件保存路径,可根据需求自行扩展。

内容的提问来源于stack exchange,提问作者Radek0582

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:31:05