首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在没有调用Looper.prepare():java.lang.RuntimeException的线程中创建处理程序

无法在没有调用Looper.prepare():java.lang.RuntimeException的线程中创建处理程序
EN

Stack Overflow用户
提问于 2013-11-13 22:05:29
回答 1查看 431关注 0票数 1

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

代码语言:javascript
运行
复制
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);
        …

        }
    });

但是在运行过程中,我得到了这个错误:

代码语言:javascript
运行
复制
Can't create handler inside thread that has not called Looper.prepare()

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

请告诉我怎么解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-13 22:10:29

Handler类使用Looper来执行它的调度,而刚刚创建的线程没有关联的活套,因此出现了错误。

由于您没有提供处理程序创建代码,所以我假设您希望调用主线程上的代码。在本例中,按照以下方式创建Handler

代码语言:javascript
运行
复制
Handler handler = new Handler(Looper.getMainLooper());

计划在该Handler上运行的任何内容都将在主线程上运行的主Looper上执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19965358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档