Interaction between GUI thread, and other Threads

Put your problem here if it does not fit any of the other categories.

Interaction between GUI thread, and other Threads

Postby Poche » Tue Mar 04, 2008 2:24 pm

Hi,

I'm new on android and I'm trying to send some message from one or more Threads, to the gui of my application...

If I send the message directly from the thread, to a method of the view, I get this error : "Only the original thread that created view hierarchy can touch its views".

I see on the web, that I can use an handler to resolve this problem. But I'm not sure that's the best solution?

Can you help me please? If someone has an example that would be nice :) !

Thank you and sorry for my english!
Poche
Freshman
Freshman
 
Posts: 6
Joined: Tue Mar 04, 2008 2:14 pm

Top

Postby plusminus » Tue Mar 04, 2008 2:33 pm

Hello poche,

since m5 you also have the following possibility:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. void android.app.Activity.runOnUIThread(Runnable action)
Parsed in 0.029 seconds, using GeSHi 1.0.8.4
.
or
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. boolean android.view.View.post(Runnable action)
  2.  
  3. boolean android.view.View.postDelayed(Runnable action, long delayMillis)
Parsed in 0.030 seconds, using GeSHi 1.0.8.4


So to change something on the UI you no more need to create a Dummy-Handler.

Regards,
plusminus
Image
Image | Android Development Community / Tutorials
User avatar
plusminus
Site Admin
Site Admin
 
Posts: 2688
Joined: Wed Nov 14, 2007 8:37 pm
Location: Schriesheim, Germany

Postby Poche » Tue Mar 04, 2008 6:59 pm

Thanks for your rapid Answer plusminus,

but I don't understand how to simply call a method of the class who's contain the gui thread from an other thread, I can't make this with an Object runnable no?
Poche
Freshman
Freshman
 
Posts: 6
Joined: Tue Mar 04, 2008 2:14 pm

Postby plusminus » Tue Mar 04, 2008 7:42 pm

Hello Poche,

let me give you an actual example.

Imagine you have display a ProgressDialog:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. this.myProgressDialog = ProgressDialog.show(this, "title", "message", true);
Parsed in 0.034 seconds, using GeSHi 1.0.8.4

Then you do some heavy work, which should not be done in the UI Thread. And in the end of that task you want to dismiss the Dialog:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.                new Thread() {
  2.  
  3.                     public void run() {
  4.  
  5.                          try{
  6.  
  7.                               // Do some heavy (fake) work
  8.  
  9.                               sleep(5000);
  10.  
  11.                          } catch (Exception e) {  }
  12.  
  13.                          // Dismiss the Dialog
  14.  
  15.                          myProgressDialog.dismiss(); // <-- this is not possible
  16.  
  17.                     }
  18.  
  19.                }.start();
Parsed in 0.037 seconds, using GeSHi 1.0.8.4

That is not possible, because UI-Changes can only be done by the UI Thread!

You need to do run that line containing .dismiss on the UI-Thread, like this:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.                                 MyActivity.this.runOnUIThread(new Runnable(){
  2.  
  3.                                         @Override
  4.  
  5.                                         public void run() {
  6.  
  7.                                                 myProgressDialog.dismiss(); // this is possible,
  8.  
  9.                                         }
  10.  
  11.                                 });
Parsed in 0.036 seconds, using GeSHi 1.0.8.4


Remember: A class does not contain a thread!
But: The code of a class (object) gets executed by a thread (maybe many at the same time)!

So within the Runnable we could the new Thread go into another class(object) which could then call a function of class we are doing all this in and then dismiss the dialog.

Understanding can be a bit tricky.

Regards,
plusminus
Image
Image | Android Development Community / Tutorials
User avatar
plusminus
Site Admin
Site Admin
 
Posts: 2688
Joined: Wed Nov 14, 2007 8:37 pm
Location: Schriesheim, Germany

Postby Poche » Wed Mar 05, 2008 7:00 pm

Thanks again for your answer plusminus,

but I'm trying to use the runOnUIThread() method, and I obtain a "View.android.policiy.PhoneWindow$DecorView@40071b58 must be attached to a window." every time I use this.

My code for a method of a class who's not the activity class, is the follow :

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.         public void desirePenser (int id) {
  3.  
  4.                 try {
  5.  
  6.                         mutex.acquire();
  7.  
  8.                                 Log.v(TAG,id+": Puis-je penser");
  9.  
  10.                                 philosophes[id].setEtat(Philosophe.Etat.PENSE);
  11.  
  12.                                                        
  13.  
  14.                                 GUI.runOnUIThread( new Runnable(){
  15.  
  16.                                         public void run() {
  17.  
  18.                                                 GUI.setPense(2); // GUI = reference on the Activity class who's contain the gui
  19.  
  20.                                         }
  21.  
  22.                                 });                            
  23.  
  24.  
  25.  
  26.                                 this.puisjeManger(precedent(id));
  27.  
  28.                                 this.puisjeManger(suivant(id));        
  29.  
  30.                         mutex.release();
  31.  
  32.                 } catch (InterruptedException ie) {
  33.  
  34.                         Log.e(TAG,ie.getMessage());
  35.  
  36.                 }
  37.  
  38.         }
  39.  
  40.  
Parsed in 0.037 seconds, using GeSHi 1.0.8.4


I don't understand why I obtain this error...
Poche
Freshman
Freshman
 
Posts: 6
Joined: Tue Mar 04, 2008 2:14 pm

Postby plusminus » Wed Mar 05, 2008 7:59 pm

Hello Poche,

"View.android.policiy.PhoneWindow$DecorView@40071b58 must be attached to a window." gets thrown, when runOnUIThread() is called and the Activity is not yet or no more visible.

Maybe you are calling the function in onCreate() :?:

Regards,
plusminus
Image
Image | Android Development Community / Tutorials
User avatar
plusminus
Site Admin
Site Admin
 
Posts: 2688
Joined: Wed Nov 14, 2007 8:37 pm
Location: Schriesheim, Germany

Top

Postby Poche » Wed Mar 05, 2008 8:37 pm

I have the following classes :


Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package projet.paradigmes;
  3.  
  4.  
  5.  
  6. import android.app.Activity;
  7.  
  8. import android.graphics.Color;
  9.  
  10. import android.os.Bundle;
  11.  
  12. import android.widget.RadioButton;
  13.  
  14.  
  15.  
  16. public class Philosophes extends Activity {
  17.  
  18.         static final int NBPHILOS = 5;
  19.  
  20.         RadioButton [] boutons;
  21.  
  22.        
  23.  
  24.         Table t;
  25.  
  26.        
  27.  
  28.     /** Called when the activity is first created. */
  29.  
  30.     @Override
  31.  
  32.     public void onCreate(Bundle icicle) {
  33.  
  34.         super.onCreate(icicle);
  35.  
  36.         setContentView(R.layout.main);
  37.  
  38.        
  39.  
  40.         boutons = new RadioButton[NBPHILOS];
  41.  
  42.        
  43.  
  44.         boutons[0] = (RadioButton)this.findViewById(R.id.philo0);
  45.  
  46.         boutons[1] = (RadioButton)this.findViewById(R.id.philo1);
  47.  
  48.         boutons[2] = (RadioButton)this.findViewById(R.id.philo2);
  49.  
  50.         boutons[3] = (RadioButton)this.findViewById(R.id.philo3);
  51.  
  52.         boutons[4] = (RadioButton)this.findViewById(R.id.philo4);      
  53.  
  54.        
  55.  
  56.        t = new Table(this);      
  57.  
  58.     }    
  59.  
  60.     public void setPense (int id) {
  61.  
  62.         boutons[id].setBackgroundColor(Color.GREEN);
  63.  
  64.         boutons[id].setText("Je Pense");
  65.  
  66.     }
  67.  
  68.  
  69.  
  70.  
  71.  
  72.         public void setMange(int id) {
  73.  
  74.         boutons[id].setBackgroundColor(Color.RED);
  75.  
  76.         boutons[id].setText("Je Mange");       
  77.  
  78.         }
  79.  
  80.  
  81.  
  82.         public void setDesireManger(int id) {
  83.  
  84.         boutons[id].setBackgroundColor(Color.GRAY);
  85.  
  86.         boutons[id].setText("Desire manger");  
  87.  
  88.         }
  89.  
  90. }
  91.  
  92.  
Parsed in 0.041 seconds, using GeSHi 1.0.8.4



Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package projet.paradigmes;
  3.  
  4.  
  5.  
  6. import java.util.concurrent.Semaphore;
  7.  
  8.  
  9.  
  10. import android.util.Log;
  11.  
  12.  
  13.  
  14. public class Table  {
  15.  
  16.         private static final int NBPHILOS = 5;
  17.  
  18.         private Philosophe [] philosophes;
  19.  
  20.         private Semaphore mutex;
  21.  
  22.         private Semaphore [] semaphoresPv;
  23.  
  24.         private static final String TAG = "MyActivity";
  25.  
  26.         Philosophes GUI;
  27.  
  28.        
  29.  
  30.         public Table (Philosophes GUI) {
  31.  
  32.                 this.GUI = GUI;
  33.  
  34.                 mutex  = new Semaphore(1);
  35.  
  36.                 this.semaphoresPv = new Semaphore[NBPHILOS];
  37.  
  38.                 this.philosophes  = new Philosophe[NBPHILOS];          
  39.  
  40.                 for (int i=0; i<NBPHILOS;i++){                 
  41.  
  42.                         philosophes[i] = new Philosophe(i,this,GUI);
  43.  
  44.                         semaphoresPv[i] = new Semaphore(0);
  45.  
  46.                 }
  47.  
  48.                 for (Philosophe p:philosophes) {
  49.  
  50.                         p.start();
  51.  
  52.                 }
  53.  
  54.         }      
  55.  
  56.  
  57.  
  58.         private void puisjeManger (int id) {
  59.  
  60.                 Log.v(TAG,id+": Puis-je manger");
  61.  
  62.                 if ((philosophes[id].getEtat()==Philosophe.Etat.DESIREMANGER) &&
  63.  
  64.                                 (philosophes[suivant(id)].getEtat()!=Philosophe.Etat.MANGE) &&
  65.  
  66.                                 (philosophes[precedent(id)].getEtat()!=Philosophe.Etat.MANGE)) {
  67.  
  68.                        
  69.  
  70.                         int test = (id+NBPHILOS-1)%NBPHILOS;
  71.  
  72.                         Log.d("Debug",test+" ");
  73.  
  74.                         Log.v(TAG,id+": Je mange");
  75.  
  76.                         philosophes[id].setEtat(Philosophe.Etat.MANGE);
  77.  
  78.                         //GUI.runOnUIThread(philosophes[id].getNotifyMangeGUI());
  79.  
  80.                         semaphoresPv[id].release();                    
  81.  
  82.                 }
  83.  
  84.         }      
  85.  
  86.         public void desireManger (int id) {
  87.  
  88.                 try {
  89.  
  90.                         mutex.acquire();
  91.  
  92.                                 Log.v(TAG,id+": Je désire manger");
  93.  
  94.                                 philosophes[id].setEtat(Philosophe.Etat.DESIREMANGER);
  95.  
  96.                                 //GUI.runOnUIThread(philosophes[id].getNotifyDesireMangerGUI());
  97.  
  98.                                 this.puisjeManger(id);                                         
  99.  
  100.                         mutex.release();
  101.  
  102.                         semaphoresPv[id].acquire();
  103.  
  104.                 } catch (InterruptedException ie) {
  105.  
  106.                         Log.e(TAG,ie.getMessage());
  107.  
  108.                 }
  109.  
  110.         }
  111.  
  112.         public void desirePenser (int id) {
  113.  
  114.                 try {
  115.  
  116.                         mutex.acquire();
  117.  
  118.                                 Log.v(TAG,id+": Puis-je penser");
  119.  
  120.                                 philosophes[id].setEtat(Philosophe.Etat.PENSE);
  121.  
  122.                                 //GUI.runOnUIThread(philosophes[id].getNotifyPenseGUI());                              
  123.  
  124.                                 GUI.runOnUIThread( new Runnable(){
  125.  
  126.                                         public void run() {
  127.  
  128.                                                 GUI.setPense(2);
  129.  
  130.                                         }
  131.  
  132.                                 });                            
  133.  
  134.                                 this.puisjeManger(precedent(id));
  135.  
  136.                                 this.puisjeManger(suivant(id));        
  137.  
  138.                         mutex.release();
  139.  
  140.                 } catch (InterruptedException ie) {
  141.  
  142.                         Log.e(TAG,ie.getMessage());
  143.  
  144.                 }
  145.  
  146.         }
  147.  
  148.         private int suivant (int n) {
  149.  
  150.                 return (n+1)%NBPHILOS;
  151.  
  152.         }
  153.  
  154.         private int precedent (int n) {
  155.  
  156.                 if (n>0) return (n-1);
  157.  
  158.                 else return NBPHILOS-1;
  159.  
  160.         }      
  161.  
  162. }
  163.  
  164.  
Parsed in 0.046 seconds, using GeSHi 1.0.8.4




Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package projet.paradigmes;
  3.  
  4.  
  5.  
  6. import android.util.Log;
  7.  
  8.  
  9.  
  10. public class Philosophe extends Thread  {
  11.  
  12.         private static final String TAG = "MyActivity";
  13.  
  14.        
  15.  
  16.         public enum Etat {PENSE, DESIREMANGER, MANGE};
  17.  
  18.         private Etat etat;
  19.  
  20.         //private int etat;
  21.  
  22.         private int id;
  23.  
  24.         private Table table;
  25.  
  26.         private Philosophes GUI;
  27.  
  28.         public Philosophe (int n, Table t, Philosophes GUI) {
  29.  
  30.                 this.id    = n;           // Numéro d'identification du philosophe
  31.  
  32.                 this.etat  = Etat.PENSE;  // A l'initialisation, le philosophe pense
  33.  
  34.                 this.table = t;           // La table du philosophe
  35.  
  36.                 this.GUI   = GUI;
  37.  
  38.         }
  39.  
  40.  
  41.  
  42.         public Runnable getNotifyPenseGUI () {
  43.  
  44.                 return new Runnable() {
  45.  
  46.             public void run() {
  47.  
  48.                                 GUI.setPense(id);
  49.  
  50.                         }
  51.  
  52.                 };
  53.  
  54.         }
  55.  
  56.         public Runnable getNotifyMangeGUI () {
  57.  
  58.                 return new Runnable() {
  59.  
  60.             public void run() {
  61.  
  62.                                 GUI.setMange(id);
  63.  
  64.                         }
  65.  
  66.                 };
  67.  
  68.         }
  69.  
  70.         public Runnable getNotifyDesireMangerGUI () {
  71.  
  72.                 return new Runnable() {
  73.  
  74.             public void run() {
  75.  
  76.                                 GUI.setDesireManger(id);
  77.  
  78.                         }
  79.  
  80.                 };
  81.  
  82.         }
  83.  
  84.         public Etat getEtat() {
  85.  
  86.                 return etat;
  87.  
  88.         }
  89.  
  90.         public void setEtat(Etat etat) {               
  91.  
  92.                 this.etat = etat;
  93.  
  94.         }      
  95.  
  96.  
  97.  
  98.         public void run () {
  99.  
  100.                 int i = 0;
  101.  
  102.                 while (i<15) {
  103.  
  104.                         try {
  105.  
  106.                                 table.desirePenser(id);
  107.  
  108.                                 sleep(500);
  109.  
  110.                                 table.desireManger(id);
  111.  
  112.                                 sleep(2000);
  113.  
  114.                                 i++;
  115.  
  116.                         }
  117.  
  118.                         catch (InterruptedException ie)
  119.  
  120.                         {
  121.  
  122.                                 Log.e(TAG,ie.getMessage());
  123.  
  124.                         }
  125.  
  126.                 }
  127.  
  128.                
  129.  
  130.         }
  131.  
  132.        
  133.  
  134.        
  135.  
  136. }
  137.  
  138.  
Parsed in 0.042 seconds, using GeSHi 1.0.8.4
Poche
Freshman
Freshman
 
Posts: 6
Joined: Tue Mar 04, 2008 2:14 pm

Postby Poche » Wed Mar 05, 2008 8:38 pm

Poche wrote:I have the following classes :


Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. package projet.paradigmes;
  2.  
  3. import android.app.Activity;
  4. import android.graphics.Color;
  5. import android.os.Bundle;
  6. import android.widget.RadioButton;
  7.  
  8. public class Philosophes extends Activity {
  9.         static final int NBPHILOS = 5;
  10.         RadioButton [] boutons;
  11.        
  12.         Table t;
  13.        
  14.     /** Called when the activity is first created. */
  15.     @Override
  16.     public void onCreate(Bundle icicle) {
  17.         super.onCreate(icicle);
  18.         setContentView(R.layout.main);
  19.        
  20.         boutons = new RadioButton[NBPHILOS];
  21.        
  22.         boutons[0] = (RadioButton)this.findViewById(R.id.philo0);
  23.         boutons[1] = (RadioButton)this.findViewById(R.id.philo1);
  24.         boutons[2] = (RadioButton)this.findViewById(R.id.philo2);
  25.         boutons[3] = (RadioButton)this.findViewById(R.id.philo3);
  26.         boutons[4] = (RadioButton)this.findViewById(R.id.philo4);      
  27.        
  28.        t = new Table(this);      
  29.     }    
  30.     public void setPense (int id) {
  31.         boutons[id].setBackgroundColor(Color.GREEN);
  32.         boutons[id].setText("Je Pense");
  33.     }
  34.  
  35.  
  36.         public void setMange(int id) {
  37.         boutons[id].setBackgroundColor(Color.RED);
  38.         boutons[id].setText("Je Mange");       
  39.         }
  40.  
  41.         public void setDesireManger(int id) {
  42.         boutons[id].setBackgroundColor(Color.GRAY);
  43.         boutons[id].setText("Desire manger");  
  44.         }
  45. }
  46.  
Parsed in 0.041 seconds, using GeSHi 1.0.8.4



Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. package projet.paradigmes;
  2.  
  3. import java.util.concurrent.Semaphore;
  4.  
  5. import android.util.Log;
  6.  
  7. public class Table  {
  8.         private static final int NBPHILOS = 5;
  9.         private Philosophe [] philosophes;
  10.         private Semaphore mutex;
  11.         private Semaphore [] semaphoresPv;
  12.         private static final String TAG = "MyActivity";
  13.         Philosophes GUI;
  14.        
  15.         public Table (Philosophes GUI) {
  16.                 this.GUI = GUI;
  17.                 mutex  = new Semaphore(1);
  18.                 this.semaphoresPv = new Semaphore[NBPHILOS];
  19.                 this.philosophes  = new Philosophe[NBPHILOS];          
  20.                 for (int i=0; i<NBPHILOS;i++){                 
  21.                         philosophes[i] = new Philosophe(i,this,GUI);
  22.                         semaphoresPv[i] = new Semaphore(0);
  23.                 }
  24.                 for (Philosophe p:philosophes) {
  25.                         p.start();
  26.                 }
  27.         }      
  28.  
  29.         private void puisjeManger (int id) {
  30.                 Log.v(TAG,id+": Puis-je manger");
  31.                 if ((philosophes[id].getEtat()==Philosophe.Etat.DESIREMANGER) &&
  32.                                 (philosophes[suivant(id)].getEtat()!=Philosophe.Etat.MANGE) &&
  33.                                 (philosophes[precedent(id)].getEtat()!=Philosophe.Etat.MANGE)) {
  34.                        
  35.                         int test = (id+NBPHILOS-1)%NBPHILOS;
  36.                         Log.d("Debug",test+" ");
  37.                         Log.v(TAG,id+": Je mange");
  38.                         philosophes[id].setEtat(Philosophe.Etat.MANGE);
  39.                         GUI.runOnUIThread(philosophes[id].getNotifyMangeGUI());
  40.                         semaphoresPv[id].release();                    
  41.                 }
  42.         }      
  43.         public void desireManger (int id) {
  44.                 try {
  45.                         mutex.acquire();
  46.                                 Log.v(TAG,id+": Je désire manger");
  47.                                 philosophes[id].setEtat(Philosophe.Etat.DESIREMANGER);
  48.                                 GUI.runOnUIThread(philosophes[id].getNotifyDesireMangerGUI());
  49.                                 this.puisjeManger(id);                                         
  50.                         mutex.release();
  51.                         semaphoresPv[id].acquire();
  52.                 } catch (InterruptedException ie) {
  53.                         Log.e(TAG,ie.getMessage());
  54.                 }
  55.         }
  56.         public void desirePenser (int id) {
  57.                 try {
  58.                         mutex.acquire();
  59.                                 Log.v(TAG,id+": Puis-je penser");
  60.                                 philosophes[id].setEtat(Philosophe.Etat.PENSE);
  61.                                 GUI.runOnUIThread(philosophes[id].getNotifyPenseGUI());                                        
  62.                                 this.puisjeManger(precedent(id));
  63.                                 this.puisjeManger(suivant(id));        
  64.                         mutex.release();
  65.                 } catch (InterruptedException ie) {
  66.                         Log.e(TAG,ie.getMessage());
  67.                 }
  68.         }
  69.         private int suivant (int n) {
  70.                 return (n+1)%NBPHILOS;
  71.         }
  72.         private int precedent (int n) {
  73.                 if (n>0) return (n-1);
  74.                 else return NBPHILOS-1;
  75.         }      
  76. }
  77.  
  78.  
Parsed in 0.047 seconds, using GeSHi 1.0.8.4




Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. package projet.paradigmes;
  2.  
  3. import android.util.Log;
  4.  
  5. public class Philosophe extends Thread  {
  6.         private static final String TAG = "MyActivity";
  7.        
  8.         public enum Etat {PENSE, DESIREMANGER, MANGE};
  9.         private Etat etat;
  10.         private int id;
  11.         private Table table;
  12.         private Philosophes GUI;
  13.         public Philosophe (int n, Table t, Philosophes GUI) {
  14.                 this.id    = n;           // Numéro d'identification du philosophe
  15.                 this.etat  = Etat.PENSE;  // A l'initialisation, le philosophe pense
  16.                 this.table = t;           // La table du philosophe
  17.                 this.GUI   = GUI;
  18.         }
  19.  
  20.         public Runnable getNotifyPenseGUI () {
  21.                 return new Runnable() {
  22.             public void run() {
  23.                                 GUI.setPense(id);
  24.                         }
  25.                 };
  26.         }
  27.         public Runnable getNotifyMangeGUI () {
  28.                 return new Runnable() {
  29.             public void run() {
  30.                                 GUI.setMange(id);
  31.                         }
  32.                 };
  33.         }
  34.         public Runnable getNotifyDesireMangerGUI () {
  35.                 return new Runnable() {
  36.             public void run() {
  37.                                 GUI.setDesireManger(id);
  38.                         }
  39.                 };
  40.         }
  41.         public Etat getEtat() {
  42.                 return etat;
  43.         }
  44.         public void setEtat(Etat etat) {               
  45.                 this.etat = etat;
  46.         }      
  47.  
  48.         public void run () {
  49.                 int i = 0;
  50.                 while (i<15) {
  51.                         try {
  52.                                 table.desirePenser(id);
  53.                                 sleep(500);
  54.                                 table.desireManger(id);
  55.                                 sleep(2000);
  56.                                 i++;
  57.                         }
  58.                         catch (InterruptedException ie)
  59.                         {
  60.                                 Log.e(TAG,ie.getMessage());
  61.                         }
  62.                 }
  63.                
  64.         }
  65.        
  66.        
  67. }
  68.  
Parsed in 0.042 seconds, using GeSHi 1.0.8.4
Poche
Freshman
Freshman
 
Posts: 6
Joined: Tue Mar 04, 2008 2:14 pm

Postby plusminus » Wed Mar 05, 2008 10:28 pm

Hello Poche,

As I already said it is probably because runOnUIThread() throws that exception, when the Activity is not yet or no more visible. Its probably because of this directly chained calls.

Philosophes.onCreate(Bundle icicle) --> new Table(this); :arrow: public Table (Philosophes GUI) --> p.start(); :arrow: public void run () --> table.desirePenser(id); :arrow: public void desirePenser (int id) --> GUI.runOnUIThread(philosophes[id].getNotifyPenseGUI());

maybe it is enough to place a sleep(500); in Philosophe.run(), right before "table.desirePenser(id);".

Regards,
plusminus
Image
Image | Android Development Community / Tutorials
User avatar
plusminus
Site Admin
Site Admin
 
Posts: 2688
Joined: Wed Nov 14, 2007 8:37 pm
Location: Schriesheim, Germany

Postby Poche » Thu Mar 06, 2008 9:04 am

Okay... Thank you very much... I never think ti this alone!! now it's working!

Thanks!!
Poche
Freshman
Freshman
 
Posts: 6
Joined: Tue Mar 04, 2008 2:14 pm

Postby plusminus » Fri Mar 07, 2008 12:45 am

No problem :)
Image
Image | Android Development Community / Tutorials
User avatar
plusminus
Site Admin
Site Admin
 
Posts: 2688
Joined: Wed Nov 14, 2007 8:37 pm
Location: Schriesheim, Germany

Top

Return to Other Coding-Problems

Who is online

Users browsing this forum: Google [Bot] and 18 guests