85岁欧尼酱 2022-04-30 16:24 采纳率: 38.9%
浏览 21
已结题

关于按钮点击第二次闪退原因

img


问题是app启动之后按钮点击一次就自动闪退了,我该如何解决


package com.example.opencv;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import java.io.IOException;

public class deom_1 extends AppCompatActivity {
    private ImageView imageView1,imageView2,imageView3;
    private Button button1;
    private Mat mat1,mat2,result;
    private Bitmap bitmap;

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mat1.release();
        //mat2.release();
        result.release();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLoadOpenCV();
        imageView1 = findViewById(R.id.imageView1);
        imageView2 = findViewById(R.id.imageView2);
        imageView3 = findViewById(R.id.imageView3);
        button1 = findViewById(R.id.button1);
        mat1 = new Mat();
       // mat2 = new Mat();
        result = new Mat();
        try {
            mat1 = Utils.loadResource(this, R.drawable.gura1);
            //mat2 = Utils.loadResource(this, R.drawable.gura2);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Imgproc.cvtColor(mat1,result,Imgproc.COLOR_RGB2GRAY);
                Imgproc.threshold(result,mat1,125,255,Imgproc.THRESH_BINARY_INV);
                //Imgproc.adaptiveThreshold(result,mat1,225,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,13,5);
                //Core.bitwise_or(mat1,mat2,result);
                bitmap = Bitmap.createBitmap(result.width(),result.height(),Bitmap.Config.ARGB_8888);
                Utils.matToBitmap(mat1,bitmap);
                imageView3.setImageBitmap(bitmap);

            }
        });
    }
    public void initLoadOpenCV() {
        boolean success = OpenCVLoader.initDebug();
        if (success) {
            Log.d("init", "initLoadOpenCV: openCV load success");
        } else {
            Log.e("init", "initLoadOpenCV: openCV load failed");
        }
    }

}
  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-04-30 20:48
    关注

    img


    这里应该加一个非空判断,如果bitmap是空,肯定会闪退

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 4月30日

悬赏问题

  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化