Threads and Frames

Résolu
HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012 - 7 avril 2006 à 14:12
HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012 - 10 avril 2006 à 09:03
Bonjour,

Je sais que ce probleme a deja été abordé plusieurs fois mais j'suis un peu dur de la feuille...

Dans une classe principale, j'ai :



public void refreshAll(Thread t){

try {

t.wait();

uiMan.run();

t.notify();

} catch (Exception e) {

e.printStackTrace();

}

}

iuMan.run() fais un repaint sur toutes les JFrames actives



refreshAll est appelee depuis plusieurs Threads de calcul, mais j'ai
une exception du style "current thread not owner", que je mette le wait
là ou dans les threads de calcul; Je voudrai juste pouvoir voir mes
Frames (resultats et autres) pendant qu'il cherchehe encore a ameliorer
la solution, et ainsi pkoi pas arreter les calculs pas un JButton....



Desole de ne pas avoir reussi avec les autres reponses deja presentes sur le forum... merci d'avance

4 réponses

etudev Messages postés 47 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 23 mai 2006
7 avril 2006 à 18:46
Salut,
Oui c'est possible de mettre des arguments dans la methode run( ) , la methode thread.start( ) appelle la methode run() du thread. Ce que je te conseille c'est d'essayé de mettre le wait() et notifyAll() dans la methode new cs"apres le ana.start()".
sinon tu peux laissé tombé le wait( ) et utilisé join(). par exemple:
public void makeRepaint(){
try{
if(null!=ana)
thread1 ex = new thead1();
ex.start();
ex.join();
}
catch(Exception e){
e.printStackTrace();
}
}
Et dans la methode run() du thread thread1 tu peux mettre getMainFrame().repaint();


Bonne chance.
3
etudev Messages postés 47 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 23 mai 2006
7 avril 2006 à 14:42
Salut,
Ce message d'erreur vient du fait que le thread qui execute le wait() n'est pas le meme que celui qui execute le start().
Bonne chance.
0
HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012
7 avril 2006 à 15:15
Dans la meme classe qui extends Thread :

public Results newCS(arguments a){
...
ana.setOptions(aBis);
ana.start();
return mat.getResults();
}

public void makeRepaint(){
try{
if(null!=ana)
ana.wait(); (*)
getMainFrame().repaint();
notifyAll();
}
catch(Exception e){
e.printStackTrace();
}
}
Et j'ai le meme message d'erreur qui porte sur la ligne (*)
Est-ce qu'il faut absolument que newCS soit run et est-il possible de mettre des arguments aux start() et run()
et ne peut-on pas dire a un thread de laisser la main dans son propre run() et pourquoi est-il aussi méchant???
0
HSylvio Messages postés 116 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 14 juin 2012
10 avril 2006 à 09:03
Ca a l'air de ressembler à ce que je veux faire; j'ai un autre probleme là alors je te remercie beaucoup j'essaierai de faire çà dès que j'ai le temps... (et oui c'est quand même pas mon objectif principal de faire l'UI...)

Merci
0
Rejoignez-nous