Problème affichage UI et thread en cours
bonjour à tous,
Voici ce que j'essaie de faire :
J'affiche à l'écran dans un textview " attente connexion client..."
Puis mon code lance un scan au travers de la lecture d'un fichier tableau (proc/net/arp)..
Quand l'ip que j'attends est connectée..la boucle qui qui lit ce fichier dans un thread s’arrête et je démarre un thread UpdateUITHread pour afficher dans le même textview : "Client connecté ip..."
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| public class ClientConnecte extends Activity {
TextView textView1;
private String ipAdresse ;
private String ipLegitime = "192.168.0.20";
int exact = 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.connexion);
textView1=(TextView)findViewById(R.id.textView1);
//j'affiche le message suivant dans un textview et je lance un scan dans un thread
textView1.setText("Attente connexion Client"+"\n"+" "+"Démarrez le client");
new Thread(new ScanThread()).start();
// du code...
}
class Scan {
//ici je parcours un fichier tableau du systeme /proc/net/arp et j'en extrait entre autre la valeur
// de ipAdresse
}
class ScanThread implements Runnable {
Scan mScan;
UpdateUIThread updateUIThread;
//tant que je n'ai pas l'ipAdresse connectée attendue (ipLegitime) je parcours en boucle
//avec ma class Scan
public void run(){
Scan mScan = new Scan();
while (exact !=0){
ArrayList<ClientScanResult> Clients = mScan.getClientList(false);
for (ClientScanResult clientScanResult : Clients) {
ipAdresse = (clientScanResult.getIpAddr().toString());
exact = (ipAdresse.compareTo(ipLegitime));
}
}
//une fois que j'ai la bonne ip connectée je change l'affichage de mon UI
UpdateUIThread updateUIThread = new UpdateUIThread();
new Thread(updateUIThread).start();
}
class UpdateUIThread implements Runnable {
String msg = ("CLIENT CONNECTE :" + ipAdresse);
@Override
public void run() {
//ça coince ici...
textView1.setText(textView1.getText().toString()+ msg );
}
}
} |
Tout roule jusqu'à l'affichage du message résultat
debug :
Citation:
Thread [<15> Thread-3740] (Suspended (exception ViewRootImpl$CalledFromWrongThreadException))
<VM does not provide monitor information>
ViewRootImpl.checkThread() line: 4746
ViewRootImpl.requestLayout() line: 823
PhoneWindow$DecorView(View).requestLayout() line: 15473
LinearLayout(View).requestLayout() line: 15473
FrameLayout(View).requestLayout() line: 15473
RelativeLayout(View).requestLayout() line: 15473
RelativeLayout.requestLayout() line: 318
TextView(View).requestLayout() line: 15473
TextView.checkForRelayout() line: 6452
TextView.setText(CharSequence, TextView$BufferType, boolean, int) line: 3696
TextView.setText(CharSequence, TextView$BufferType) line: 3554
TextView.setText(CharSequence) line: 3529
SelectFile$UpdateUIThread.run() line: 283
Thread.run() line: 856
Je n'arrive pas à comprendre pourquoi...
Merci pour vos suggestions..