sahahiba
Messages postés16Date d'inscriptiondimanche 8 octobre 2006StatutMembreDernière intervention12 avril 2009
-
14 oct. 2006 à 10:31
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
14 oct. 2006 à 15:54
bonjour,
j'ai une question, j'ai voulu tester sur une instance du thread avant de l'instanciée. est ce qu'il possible?
est ce que je peut faire "thr.isAlive()" avec the est une instance du thread .
merci.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 14 oct. 2006 à 14:29
Salut :
Déja s'il y a une variable n'est pas instancié, le compilateur signalera une erreur.
Toute initialisation en java passe soit :
1. par l'opérateur new
2. par une méthode d'initialisation.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 14 oct. 2006 à 14:34
Salut :
J'ai oublié un autre point :
3. Si votre variable est un attribut elle sera initalisé implicitement à une valeur par défaut.
dans le cas d'un objet toute tentative de manipulation de cet objet sans initialisation déclenche l'exception NullPointerException.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 14 oct. 2006 à 14:50
Saluts,
je ne suis pas super d'accord avec toi [auteurdetail.aspx?ID=237842 Ombitious_Developper]vu qu'en java tu peux tres bien faire Object o = null; donc
tu peux ajouter un petit 3
ensuite l'initialisation d'une variable dépend de la porté de la variable exemple:
prenons le code suivant
public class Test{
public void plop(){
Object o;
Object o2 = o;
}
public static void main(String [] args){
new Test().plop();
}
}
si on compile on aura cette erreur :
Test.java:4: variable o might not have been initialized
Object o2 = o;
^
1 error
par contre si on fait avec le code suivant :
public class Test{
Object o;
public void plop(){
Object o2 = o;
}
public static void main(String [] args){
new Test().plop();
}
}
la on tout ce passe bien pas d'erreur
conclusion l'initialisation dépend de la portée d'une variable
voilou je ne répond pas à la question d'orrigine mais je voulais juste apporter une petite explication sur les dires ci-dessus....
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
WORA
Vous n’avez pas trouvé la réponse que vous recherchez ?
sahahiba
Messages postés16Date d'inscriptiondimanche 8 octobre 2006StatutMembreDernière intervention12 avril 2009 14 oct. 2006 à 14:52
salut,
oui c'est ça le pb, mai ce que j'ai fait et ce que j'ai besion, est de tester sur ce variable non instancié,il est déclaré seulement.
et au moment de l'execution l'exception "NullPointerException" est enlevée.
donc j'ai besion de le tester avant de l'instancié.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 14 oct. 2006 à 14:59
Salut :
Pouvez vous précisez votre problème avec un petit bout de code.
sahahiba
Messages postés16Date d'inscriptiondimanche 8 octobre 2006StatutMembreDernière intervention12 avril 2009 14 oct. 2006 à 15:19
salut,
j'ai fait un traitement et à un niveau, j'ai besion de tester sur un objet qui est declaré mais n'est pas inicialisé, exemple:
j'ai
class monthread
{
public synchronized run()
{
//////////traitemnet
terminer=true;
}
public static boolean return_treminer()
{
return(terminer);
}
}
et plus loin
un autre thread qui j'ai déclaré "monthread m1;"
et j'ai fait
while( !m1.return_treminer()){}
////////////////////////
le pb est:
avant le while j'ai pas les attributs de "monthread " pour l'inisalisation de m1 , mais à certain moment une autre fonction fait l'inisialisation.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 14 oct. 2006 à 15:54
Salut,
tu ne si la méthode return_treminer n'est pas déclarée en static tu ne pourras pas l'utiliser si m1 vaut null....
donc soit tu passe une reference valide à m1 (la meilleur solution) soit du declare la methode en staitc avec les contraintes associée au static...
donc solution :
class monthread
{
public synchronized run()
{
//////////traitemnet
terminer=true;
}
public static boolean return_treminer()
{
return(terminer);
}
}
public classe AutreThread extends Thread{
private monthread m1 = null;
public AutreThread(monthread m1){
if(m1 == null)
throw new NullPointerException("null monthread !");//petit teste
this.m1 = m1;//comme ca tu touche la bonne instance
}
public void run(){
while( !m1.return_treminer()){}
}
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."