0

カスタムカメラを実装しましたが、しばらくするとスタンバイ状態になります。スタンバイは、stopPreview、カメラのリリース、およびスタンバイを終了するためにユーザーにタップするように指示するビューから構成されます。新しいスレッド内にテキストを設定したため、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 に答える