Java 在进度条完成后尝试设置ImageBitmap会导致错误

Java 在进度条完成后尝试设置ImageBitmap会导致错误,java,android,android-progressbar,Java,Android,Android Progressbar,这是我第一次在我的应用程序中实现水平进度条 目标是在进度条完成后,应用程序显示toast消息和图像位图 toast消息运行正常,但图像使应用程序强制关闭 这是我的代码: Button buttonProceed = (Button) findViewById(R.id.buttonProceed); buttonProceed.setOnClickListener(new View.OnClickListener() { @Override public

这是我第一次在我的应用程序中实现水平进度条 目标是在进度条完成后,应用程序显示toast消息和图像位图 toast消息运行正常,但图像使应用程序强制关闭

这是我的代码:

Button buttonProceed = (Button) findViewById(R.id.buttonProceed);
    buttonProceed.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            progressBar = new ProgressDialog(v.getContext());
            progressBar.setCancelable(true);
            progressBar.setMessage("Processing");
            progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressBar.setProgress(0);
            progressBar.setMax(100);
            progressBar.show();

            progressBarStatus = 0;

            fileProcess = 0;

            String toastMessage = "Citra host berhasil ditanam citra watermark dan disimpan di internal storage";
            final Toast toast = Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);

            final ImageView resultImageView = (ImageView) findViewById(R.id.viewResult);

            new Thread(new Runnable() {
                public void run() {
                    while (progressBarStatus < 100) {
                        progressBarStatus = progressMarker();

                        try{
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                        progressBarHandler.post(new Runnable() {
                            public void run() {
                                progressBar.setProgress(progressBarStatus);
                            }
                        });
                    }

                    if (progressBarStatus >= 100) {
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                        progressBar.dismiss();
                        toast.show();
                        //the resultBitmap variable is declared in global
                        resultImageView.setImageBitmap(resultBitmap);
                    }
                }
            }).start();
        }
    });
}
Button-buttonprocessed=(Button)findViewById(R.id.buttonprocessed);
ButtonProced.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
progressBar=newprogressdialog(v.getContext());
progressBar.setCancelable(真);
progressBar.setMessage(“处理”);
progressBar.setProgressStyle(ProgressDialog.STYLE_水平);
progressBar.setProgress(0);
设置最大进度条(100);
progressBar.show();
progressBarStatus=0;
fileProcess=0;
String toastMessage=“Citra主机berhasil ditanam Citra水印和disimpan di内部存储”;
final Toast Toast=Toast.makeText(getApplicationContext(),toastMessage,Toast.LENGTH\u SHORT);
toast.setGravity(重心水平,0,0);
最终ImageView结果ImageView=(ImageView)findViewById(R.id.viewResult);
新线程(newrunnable()){
公开募捐{
而(状态<100){
progressBarStatus=progressMarker();
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
progressBarHandler.post(新的Runnable(){
公开募捐{
progressBar.setProgress(progressBar状态);
}
});
}
如果(progressBarStatus>=100){
试一试{
《睡眠》(2000年);
}捕捉(中断异常e){
e、 printStackTrace();
}
progressBar.disclose();
toast.show();
//resultBitmap变量以全局形式声明
resultImageView.setImageBitmap(resultBitmap);
}
}
}).start();
}
});
}
那么,有人能帮我找出代码中的错误吗


尊敬

问题是不允许您在新线程中更改UI。为此,可以使用AsyncTask而不是线程

以下是一些例子:

您应该调用
progressBar.setProgress(progressBarStatus)在异步任务的
onProgressUpdate(字符串…进度)

并且应该在
onPostExecute(字符串结果)
中调用此代码:


因为在主UI线程上调用了
onPostExecute
中的代码。

若你们想在后台处理,那个么它是最好的选择。
progressBar.dismiss();
toast.show();
//the resultBitmap variable is declared in global
resultImageView.setImageBitmap(resultBitmap);