test d'égalité - Java - Programmation
Marsh Posté le 21-11-2005 à 21:39:11
Manquent les bases de Java là, je te conseille de tout reprendre du début
Un type primitif n'est jamais passé en argument par référence, toujours pas valeur. L'inverse pour les objets.
Marsh Posté le 22-11-2005 à 08:55:02
Ta classe Client doit implémenter Runnable.
Pour le test d'égalité c'est :
Code :
|
comme le dit masklinn, commence par apprendre les bases !
Marsh Posté le 22-11-2005 à 14:55:06
vb11 a écrit :
|
ou encore
Code :
|
Marsh Posté le 22-11-2005 à 16:36:32
Trollable a écrit : ou encore
|
Merci
Marsh Posté le 22-11-2005 à 16:42:23
Et c'est plus rapide/propre/intelligent de faire ça :
Code :
|
Marsh Posté le 21-11-2005 à 21:16:04
Bonsoir
Comme vous pouvez vous en doutez, j'ai un petit problème avec une source, et comme tous les débutants, c'est sur des problèmes d'égalité ^^
J'ai une classe qui me permet de stocker diverses infos dont entre autre:
class Table{
private boolean connecte;
public boolean estConnecte(){
if (connecte)
return true;
else
return false;
}
public Table (int n, String i, int po, boolean c){
this.num=n;
this.ip=i;
this.port=po;
this.connecte=c;
System.out.println("Client "+num+" ajoute a la table" );
}
et quand je me sert de la classe dans, j'ai un probleme (en fait j'en ai 2 ^^ )
class Client{
Thread param;
public Client(){
//creation d'un vecteur qui contiendra les paramètre des clients
v = new Vector();
//ajout des 4 clients
v.addElement (new Table(1,"127.0.0.1",5000,false));
v.addElement (new Table(2,"127.0.0.1",6000,false));
v.addElement (new Table(3,"127.0.0.1",7000,false));
v.addElement (new Table(4,"127.0.0.1",8000,false));
param = new Thread(this);
param.run();
}
public void run(){
int i=0;
Socket tmp=null;
Table t;
while (true){
while (i<4){ //on parcours toutes les cases du vecteur
t=(Table)v.elementAt(i); //recupération de l'élément courant de type Table
if ((t.estConnecte()).equals(false)){ //si le client courant n'est pas déja connecte
try{
tmp=new Socket(t.getIp(),t.getPort()); //on cree une socket vers lui
}
catch (Exception e){};
if (tmp != null){ //si cette socket est bien cree, c'est que le client est connecté
t.setStatus(true); //on change son statut
i++; //on passe au client suivant
}
System.out.println("Client n"+t.getNum()+" ip: "+t.getIp()+" port: "+t.getPort()+" pseudo: "+t.getPseudo()+" connecte?: "+t.estConnecte());
}
else //s'il est déja connecté
i++; //on passe au client suivant
}
try{
param.wait(500); //on attend 500ms avant de boucler
}
catch (InterruptedException ex){
ex.printStackTrace();
}
}
}
}
if ((t.estConnecte()).equals(false))
Le probleme est la:
Quand je compile, j'ai un message qui me dit "boolean cannot be dereferenced".
J'ai regardé un peu sur le net ce que je pouvais trouver et j'ai vu ca http://forums.java.sun.com/thread. [...] ID=3964338. Si j'ai bien compris, je peux pas utiliser la fonction equals() sur false puisque c'est un type primitif et qu''il n'a pas de methode.
Je peux pas utiliser non plus == puisque ca compare les références... bon, j'ai quand même essayé et effectivement, ca marche pas
du coup, comment je fais?
param.wait(500);
Mon autre problème se situe au niveau du wait, même si la je dois avouer que j'ai pas encore trop cherché. Quand je lance le fichier, il me met
"Exception in thread "main" java.lang.IllegalMonitorStateException: current thread not owner"
Il me semble avoir vu que pour seul le proprietaire du thred peut lancer la methode wait, mais si param n'est pas proprietaire, qui l'est?