2010-08-05 11 views
7
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(); 
     } 

    } 

utilizo el código anterior, pero no se consiguió running.it CalledFromWrongThreadException ¿cuál es el problema INB lo anterior code.Please Dame un poco de antemano suggestions.ThanksCalledFromWrongThreadException

Respuesta

8

Creo que no se puede hacer ver las modificaciones de otro subproceso que el subproceso de interfaz de usuario, por lo tanto, cree handlers en oncreate y publique su subproceso, o utilice el método AsyncTask o runOnUIThread para enviar porciones de código directamente al subproceso de la interfaz de usuario.

+1

Si desea que sus 2 hilos para ser ejecutadas una después de la otra, ¿por qué no simplemente publicar sus 2 hilos para el mismo controlador ? – Sephy

+0

"relacionado con su pregunta" - ¿cuál es su pregunta, entonces? Pensé que Sephy dio una respuesta adecuada a tu única pregunta en el texto. Sé más específico. – LordTwaroog

+0

Gracias por su respuesta Sephy, y cómo utilizamos los 2 hilos en handlers. Dame un código de muestra. – Pinki

0

He editado el código de su segunda función, veo que su código es un bucle para siempre porque el primer método llama a secondMethod y el segundo método llama al nuevo firstMethod para iniciar y luego realizar un ciclo para siempre. Lo quité y se trasladó la actualización del código ImageView en la rosca de la interfaz de usuario, se puede probar esto:

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(); 
    } 
}