1

我有以下代码在另一个线程中运行一个函数:

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

        @Override
        public void onClick(View v) {

        …
                progressBar.setVisibility(View.VISIBLE);

                Thread thread = new Thread() {
                    @Override
                    public void run() {
                        matrixOperation(sourcePhoto);
                    }
                };
                thread.start();

                progressBar.setVisibility(View.INVISIBLE);
        …

        }
    });

但是在运行时我收到了这个错误:

Can't create handler inside thread that has not called Looper.prepare()

我搜索并发现此错误的一个原因是“您无法从后台线程执行 AsyncTask。请参阅“但这不是后台线程”的“线程规则”部分,我从我的主活动中调用它。

请告诉我如何解决这个问题。

4

1 回答 1

1

该类Handler使用Loopers 来执行其调度,并且刚刚创建的线程没有关联的 looper - 因此出现错误。

由于您没有提供处理程序创建代码,我假设您想在主线程上调用代码。在这种情况下,创建Handler如下:

Handler handler = new Handler(Looper.getMainLooper());

任何计划在其上运行的东西都HandlerLooper在主线程上运行的 main 上执行。

于 2013-11-13T22:10:29.733 回答