0

我已经实现了一个自定义相机,我希望它在一段时间后进入待机状态。待机由停止预览、相机释放和告诉用户点击以退出待机的视图组成。因为我在新线程中设置了文本,所以我得到了 CalledFromWrongThreadException,但我不知道解决方案可能是什么。我在周围找到了其他帖子,但没有一个真正有效。

代码:

    private void initCamera()
        {//more code


                threadModifiedText = (TextView) findViewById(R.id.textView1);
                Thread standbyThread = new Thread()
                {
                    @Override
                    public void run()
                    {
                        try
                        {

                            while (timeCounter > 0)
                            {
                                if (!activeThread)
                                {
                                    sleep(100);
                                    if (timeCounter % 10 == 0)
                                    {
                                        threadHandler.sendEmptyMessage((int) timeCounter / 10);
                                    }
                                    timeCounter--;
                                }
                            }
                        }
                        catch (InterruptedException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        mCamera.stopPreview();
                        mCamera.release();
                        TextView standbytext = new TextView(SlicesActivity.this);
                        standbytext.setText("Tap to exit standby mode");
                        FrameLayout preview = (FrameLayout) findViewById(id.FrameLayout_camera_preview);
                        preview.addView(standbytext);

                    }
                };
                standbyThread.start();

//more code}

    @Override
    public void onUserInteraction()
    {
        Log.d("~~~~~~~~~", "apasat");
        activeThread = true;
            timerCounter = 300;


    }

    private Handler threadHandler = new Handler()
    {
        public void handleMessage(android.os.Message msg)
        {
            // whenever the Thread notifies this handler we have
            // only this behavior
            threadModifiedText.setText("\ncounter is " + Integer.toString(msg.what));
        }
    };

请各位大侠给点建议。10倍

4

2 回答 2

1

尝试使用

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // TODO: update your UI here
        }
    });

在您的线程中更新 UI

于 2012-10-19T11:42:38.510 回答
1

除了 UI 线程,您不能在任何线程内设置文本值。完成您的后台线程操作并在您的操作结束后在 UI 线程中设置文本值。

于 2012-10-19T11:43:31.110 回答