CalledFromWrongThreadException - PullRequest
       8

CalledFromWrongThreadException

8 голосов
/ 05 августа 2010
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final ThraedDemo objDemo = new ThraedDemo();
    Thread objThread = new Thread() {

        @Override
        public void run() {

            objDemo.firstMethod();
        }
    };
    objThread.start();
}


class ThraedDemo {

        private void firstMethod() {
            Thread objThread = new Thread() {

                @Override
                public void run() {
                    try {
                    ((ImageView)findViewById(R.id.ImageViewnumber)).setImageResource(nums[n]);

                        Thread.sleep(10000);
                        Log.v("Thread","1111111111111111sleep");
                    } catch (InterruptedException ex) {
                        System.out.println("interuped exception" + ex.getMessage());
                    }
                    secondMethod();
                }

                private void secondMethod() {
        Thread objThread = new Thread() {

            @Override
            public void run() {
                try {
                ((ImageView)findViewById(R.id.ImageViewResult)).setImageResource(nums[n+1]);

                n++;

                    Thread.sleep(10000);
                   Log.v("Thread","22222222222 sleep");
                } catch (InterruptedException ex) {
                    System.out.println("interuped exception" + ex.getMessage());
                }
                firstMethod();
            }
        };
        objThread.start();
    }

            };
            objThread.start();
        }

    }

Я использую приведенный выше код, но он не работает. Он получил CalledFromWrongThreadException В чем проблема в приведенном выше коде. Пожалуйста, дайте мне несколько советов. Заранее спасибо

Ответы [ 2 ]

10 голосов
/ 05 августа 2010

Я думаю, что вы не можете просматривать изменения из другого потока, кроме потока пользовательского интерфейса, поэтому либо создайте обработчики в oncreate и опубликуйте в нем свой поток, либо используйте AsyncTask ,или runOnUIThread метод для отправки частей кода непосредственно в поток пользовательского интерфейса.

0 голосов
/ 24 декабря 2015

Я отредактировал ваш 2-й код функции, я вижу, что ваш код является циклом навсегда, потому что firstMethod вызывает secondMethod, а secondMethod вызывает новый firstMethod для запуска, а затем цикл навсегда.Я удалил его и переместил обновление кода ImageView в поток пользовательского интерфейса, не могли бы вы попробовать это:

class ThraedDemo {

    private void firstMethod() {
        Thread objThread = new Thread() {
            @Override
            public void run() {
                try {
                    runOnUiThread(new Runnable() {
                        public void run(){ 
                            ((ImageView)findViewById(R.id.ImageViewnumber)).setImageResource(nums[n]);  
                        }
                    });
                    Thread.sleep(10000);
                    Log.v("Thread","1111111111111111sleep");
                } catch (InterruptedException ex) {
                    System.out.println("interuped exception" + ex.getMessage());
                }
                secondMethod();
            }
        };
        objThread.start();
    }

    private void secondMethod() {
        Thread objThread2 = new Thread() {

            @Override
            public void run() {
                try {
                    runOnUiThread(new Runnable() {
                        public void run(){ 
                            ((ImageView)findViewById(R.id.ImageViewnumber)).setImageResource(nums[n+1]);  
                        }
                    });
                    n++;
                    Thread.sleep(10000);
                    Log.v("Thread","22222222222 sleep");
                } catch (InterruptedException ex) {
                    System.out.println("interuped exception" + ex.getMessage());
                }
            }
        };
        objThread2.start();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...