Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1123 connectés 

  FORUM HardWare.fr
  Programmation

  [JAVA] Quelque difficulté à passer de C++ à Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Quelque difficulté à passer de C++ à Java

n°107695
Ventilo
Ventilo? Depuis 1998!
Posté le 05-03-2002 à 08:10:15  profilanswer
 

Voilà je veux crée une array de 100 items, mais ne pas les instanciers automatiquement. en C++ je fais quelquechose du genre:
 

Code :
  1. Client *Clients[100];
  2. Clients[i] = new Client("127.0.0.1" );


 
Mais en java je ne peut pas car:
1) ya pas de pointeurs  :cry:  
2) une fois larray crée, tout les items sont instanciers  :pt1cable:  
 
Alors quelqu'un qui sy connait en JAVA pourait t'il m'aider? Ha oui, j'ai essayer d'utiliser un Vecteur, mais il me retourne un Object quand je fais vecteur.get() alors je peut pas les transformer en ma classe (client)??

 

[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo]

mood
Publicité
Posté le 05-03-2002 à 08:10:15  profilanswer
 

n°107704
darklord
You're welcome
Posté le 05-03-2002 à 09:11:03  profilanswer
 

Ventilo a écrit a écrit :

Voilà je veux crée une array de 100 items, mais ne pas les instanciers automatiquement. en C++ je fais quelquechose du genre:
 

Code :
  1. Client *Clients[100];
  2. Clients[i] = new Client("127.0.0.1" );


 
Mais en java je ne peut pas car:
1) ya pas de pointeurs  :cry:  
2) une fois larray crée, tout les items sont instanciers  :pt1cable:  
 
Alors quelqu'un qui sy connait en JAVA pourait t'il m'aider? Ha oui, j'ai essayer d'utiliser un Vecteur, mais il me retourne un Object quand je fais vecteur.get() alors je peut pas les transformer en ma classe (client)??  
 
 




 
Que veux tu dire par instancier automatiquement? En Java lorsque tu fais
 
Clients = new Client[100];
 
ca crée un tableau contenant 100 objets de type Client. Après tu peux faire
 
Clients[i]= ....
 
Je comprends pas où est ton problème. Pour le vecteur c'est parce que c'est un container générique et donc il prend des références d'objets en paramètres.
 
Pour récupérer ton client tu dois le downcaster au bon type, genre
 
Client c = (Client)v.getElementAt(i);
 
A+


---------------
Just because you feel good does not make you right
n°107706
gfive
Posté le 05-03-2002 à 09:14:14  profilanswer
 

bah.....
 
Client[] tableau = new Client[100];
 
et c'est tout.....
 
 
Sinon, avec un vecteur, il te retourne un objet car la propriété d'un vecteur est de contenir des objets de type différent...Si tu sais que tu n'as mis QUE des instances de la classe Client dedans, un cast suffit à récupérer un objet Client :
 
Client client = (Client) vecteur.get(i);
 
Si tu veux vraiment blinder le tout, tu faisd ça :
 
try {
   Client client = (Client) vecteur.get(i);
} catch (ClassCastException cce) {
   System.err.println("Grosse quiche, je veux des object Client dans mon vecteur!" );
}
 
:D

n°107712
gfive
Posté le 05-03-2002 à 09:18:46  profilanswer
 

Une semaine de vacances, j'ai perdu la main! bouhou!! :D

n°107713
darklord
You're welcome
Posté le 05-03-2002 à 09:19:09  profilanswer
 

prems :D

 

[jfdsdjhfuetppo]--Message édité par DarkLord--[/jfdsdjhfuetppo]


---------------
Just because you feel good does not make you right
n°107724
benou
Posté le 05-03-2002 à 10:02:16  profilanswer
 

DarkLord a écrit a écrit :

prems :D  




peut être mais ca compile pas :  
 
Clients = new Client[100];  
 
c'est pas en mettant un 's' que Java comprend que c'est un tableau ;)

n°107729
gfive
Posté le 05-03-2002 à 10:07:56  profilanswer
 

hahaha!!! Et toceuuuuh!!! :D:D:D
 
Merci Benou!

n°107740
Cherrytree
cn=?
Posté le 05-03-2002 à 10:30:52  profilanswer
 

:D

n°107782
darklord
You're welcome
Posté le 05-03-2002 à 12:07:06  profilanswer
 

benou a écrit a écrit :

 
peut être mais ca compile pas :  
 
Clients = new Client[100];  
 
c'est pas en mettant un 's' que Java comprend que c'est un tableau ;)  




 
fuck off!  :fou:  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 :lol:  :lol:  :lol:  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 :hello:


---------------
Just because you feel good does not make you right
n°107810
benou
Posté le 05-03-2002 à 13:31:27  profilanswer
 

DarkLord a écrit a écrit :

 
fuck off!  :fou:  




 
:lol: :hello:

mood
Publicité
Posté le 05-03-2002 à 13:31:27  profilanswer
 

n°108004
Ventilo
Ventilo? Depuis 1998!
Posté le 05-03-2002 à 20:56:52  profilanswer
 

Je vais expliquer ce que je veux faire:
 
J'ai une classe Client qui est apeu près comme ca:

Code :
  1. class Client Extends Thread
  2. {
  3.    /*
  4.     ...
  5.    */
  6.    Socket csocket;
  7.    Client(Socket NouveauSocket)
  8.    {
  9.       //...
  10.       csocket = NouveauSocket;
  11.       //...
  12.    }
  13. }


 
pour crée un client je fait:

Code :
  1. Client nClient = new Client(serversocet.accept);


 
Donc si je veux plus d'un client il faut je le les mette dans un array style

Code :
  1. Client Clients[100]

, donc je ne peut pas faire

Code :
  1. Client Clients[100] = new Client(serversocket.accept)

parce qu'il essaie de me crée 100 clients sur le même socket  :crazy:
 
Ho et merci pour le cast de classes, je savais pas que l'on pouvait faire ca avec des classes autre que des types de base  :wahoo:

 

[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo]

n°108041
matafan
Posté le 05-03-2002 à 22:24:28  profilanswer
 

On on dit « Client[] clients = new Client[100] » , pas Client « Clients[100] = new Client(serversocket.accept) » (ce qui est d'ailleurs incorrect, tu as un Array gauche et un Client à droite).
 
Ensuite seulement tu instancies tes Client : « clients[i] = new Client(serversocket.accept) ».

 

[jfdsdjhfuetppo]--Message édité par Matafan--[/jfdsdjhfuetppo]

n°108070
Ventilo
Ventilo? Depuis 1998!
Posté le 05-03-2002 à 23:46:29  profilanswer
 

Matafan a écrit a écrit :

On on dit « Client[] clients = new Client[100] » , pas Client « Clients[100] = new Client(serversocket.accept) » (ce qui est d'ailleurs incorrect, tu as un Array gauche et un Client à droite).
 
Ensuite seulement tu instancies tes Client : « clients[i] = new Client(serversocket.accept) ».  
 
 




 
Merci bien  :hello:  
j'avais mal compris  le principe des arrays :D
Je comprend pourquoi ca voulait pas compiler  :lol:

 

[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo]

n°108145
benou
Posté le 06-03-2002 à 10:02:14  profilanswer
 

pkoi créer un tableau de client ???
à chaque appel de accept() l'execution va être bloquée...  
 
Ce qu'il faut faire c'est une boucle qui "accepte" les connection, et qui créé un nouveau thread pour chaque connection d'un client

n°108147
darklord
You're welcome
Posté le 06-03-2002 à 10:04:46  profilanswer
 

benou a écrit a écrit :

pkoi créer un tableau de client ???
à chaque appel de accept() l'execution va être bloquée...  
 
Ce qu'il faut faire c'est une boucle qui "accepte" les connection, et qui créé un nouveau thread pour chaque connection d'un client  




 
il programmait en C++ avant, ceci doit expliquer cela


---------------
Just because you feel good does not make you right
n°108174
Ventilo
Ventilo? Depuis 1998!
Posté le 06-03-2002 à 10:48:46  profilanswer
 

Un Client est un Thread, donc en gros mon program est une boucle qui attend des conexion pendant que chaque client est géré par un thread...  
 
C'est pas ca qui faut faire??

n°108180
darklord
You're welcome
Posté le 06-03-2002 à 10:58:35  profilanswer
 

bin tu dois pas mettre ca dans un tableau en tout cas puisque tu ne connais pas le nombre de client à la base ...


---------------
Just because you feel good does not make you right
n°108195
benou
Posté le 06-03-2002 à 11:21:01  profilanswer
 

Ventilo a écrit a écrit :

Un Client est un Thread, donc en gros mon program est une boucle qui attend des conexion pendant que chaque client est géré par un thread...  
 
C'est pas ca qui faut faire??  




c'est quoi l'intérêt de stocker les Clients dans un tableau ... si tu fais un start dessus il s'executeront même si tu ne garde pas leur référence ...
 
ca ca devrait marcher ...  
 
while (true) {
   new Client(serversocet.accept()).start();
}

n°108196
darklord
You're welcome
Posté le 06-03-2002 à 11:22:15  profilanswer
 

il veut peut etre garder une ref sur ces clients pour faire des stats ou d'autres choses dans ce gout là.
 
Mais le tableau n'est pas la bonne structure pour cette utilisation. essaie plutot avec un Vecteur (meme si c'est pas ce qu'il y a de plus efficient)


---------------
Just because you feel good does not make you right
n°108198
benou
Posté le 06-03-2002 à 11:23:15  profilanswer
 

DarkLord a écrit a écrit :

il veut peut etre garder une ref sur ces clients pour faire des stats ou d'autres choses dans ce gout là.
 
Mais le tableau n'est pas la bonne structure pour cette utilisation. essaie plutot avec un Vecteur (meme si c'est pas ce qu'il y a de plus efficient)  




ArrayList !!!! ;)

n°108200
darklord
You're welcome
Posté le 06-03-2002 à 11:24:55  profilanswer
 

oui juste puisque ce sont des clients. My mistake :(


---------------
Just because you feel good does not make you right
n°108205
gfive
Posté le 06-03-2002 à 11:34:49  profilanswer
 

Benou : pas toujours : pour les applets, on peut pas utiliser l'ArrayList!! Bouhou!

n°108206
Ventilo
Ventilo? Depuis 1998!
Posté le 06-03-2002 à 11:36:29  profilanswer
 

Je fais un serveur P2P (je suis à la mode  :sol:) donc je dois garder une liste des clients pour pouvoir broadcaster des événement: chat/anoncement etc...
 
J'ai un petit problème avec les thread justement, ILS NE SE FERMENT JAMAIS  :fou:
 
J'ai regarder dans les tutorials de SUN mais je suis pas capable de totalement les terminer!! La classe n'est jamais == null, la je comprend vraiment pas pourquoi :( la fonction stop() de mon thread n'est jamais appeller!!  
 
Vous auriez pas une techniques fiable?

n°108210
darklord
You're welcome
Posté le 06-03-2002 à 11:42:19  profilanswer
 

public void run {
 
   while(!stopped) {
         ///
   }
 
   public void kill() {
     stopped = true;
   }
}


---------------
Just because you feel good does not make you right
n°108223
Ventilo
Ventilo? Depuis 1998!
Posté le 06-03-2002 à 12:03:59  profilanswer
 

DarkLord a écrit a écrit :

public void run {
 
   while(!stopped) {
         ///
   }
 
   public void kill() {
     stopped = true;
   }
}  




 
Normalement est-ce que la fonction stop() du thread sera appeller avec cette technique?

n°108228
darklord
You're welcome
Posté le 06-03-2002 à 12:12:08  profilanswer
 

c'est deprecated stop()


---------------
Just because you feel good does not make you right
n°108273
Cherrytree
cn=?
Posté le 06-03-2002 à 13:59:47  profilanswer
 

gfive a écrit a écrit :

Benou : pas toujours : pour les applets, on peut pas utiliser l'ArrayList!! Bouhou!  




 
Bâh pourquoi ?

n°108279
darklord
You're welcome
Posté le 06-03-2002 à 14:12:12  profilanswer
 

il veut dire sans le JRE (avec la JVM du browser qui n'est pas 1.3


---------------
Just because you feel good does not make you right
n°108289
gfive
Posté le 06-03-2002 à 14:30:34  profilanswer
 

Benou : Ouais, C'est exacteent ce que dit Dark! Et...Depuis que je fais des applets (jre 1.1.5), je passe mon temps à potasser la javadoc à la recherche des champs "since"....Par exemple, pour couper le début d'un StringBuffer, en jre 1.1.5.....C une horreur! Faut le retourner, couper la fin, et le reretourner.....C null!! bouhou!

n°108296
hastur
Posté le 06-03-2002 à 14:43:16  profilanswer
 

Comme l'a dis darklord, le meilleure moyen est de faire une boucle sur un boolean et de mettre se boolean a false lorsque tu veux stopper le thread.
Cette methode n'appelera pas la fonction stop du thread, le thread se finira juste de maniere naturelle.
Si tu veut faire un peu de nettoyage juste avant que le thread ne se termine tu peux le faire aprez la boucle :
 
public void run {  
 
  while(running) {  
        ///  
  }  
  //c'est ici que tu fais ton nettoyage
  nettoyage();
}
 
public void nettoyage()
{
  ...
}
  public void kill() {  
    running = false;  
  }

n°108324
LeGreg
Posté le 06-03-2002 à 15:15:30  profilanswer
 

benou a écrit a écrit :

 
c'est quoi l'intérêt de stocker les Clients dans un tableau ... si tu fais un start dessus il s'executeront même si tu ne garde pas leur référence ...
ca ca devrait marcher ...  
while (true) {
   new Client(serversocet.accept()).start();
}  




Ca a tout de meme un inconvenient.
Il n'y a pas de moyen de limiter le nombre de clients, de faire
des timeout depuis le thread principal (quand un thread est plante), de fermer des connexions proprement lors d'un shutdown,
de gerer un pool de connexions etc..
je pense qu'il y a plein de raisons pour lesquelles on voudrait
conserver une trace des clients ouverts.
 
A+
LEGREG

n°108326
benou
Posté le 06-03-2002 à 15:18:08  profilanswer
 

je suis bien d'accord, mais bon, ca fait 2 lignes, faut pas trop demander non plus ! ;)
évidement, pour un vrai programme, il faut gérer les connections mieux que ca ...

n°108333
gfive
Posté le 06-03-2002 à 15:27:13  profilanswer
 

Bah déjà, j'imagine que y'a un identifiant pour chaque client...A ce moment là, une HashTable (ou une HashMAp) pour les gérer est très bien...Pour limiter le nombre de connections, c'est facile : avant d'en acepter une nouvelle, si hash est ta table de hashage qui gère les connections, tu fais :  
 
if (hash.size() < MAX_CON) {
  // Accepter la connection
} else {
  // Refuser la connection  
}

n°108335
LeGreg
Posté le 06-03-2002 à 15:29:55  profilanswer
 

on se perd la.
 
LEGREG

n°108520
Ventilo
Ventilo? Depuis 1998!
Posté le 06-03-2002 à 20:09:56  profilanswer
 

legreg a écrit a écrit :

on se perd la.
 
LEGREG  




 
Ben voyon  :lol:  
 
Mais j'ai réglé mon problème, je cherchais pas à la bonne place... Ma classe client avait une référence obscure qui faisait qu'elle nétait jamais "terminé".
 
 :hello:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [JAVA] Quelque difficulté à passer de C++ à Java

 

Sujets relatifs
[JAVA] Impossible de supprimer des fichiers uploades sur TomcatJAVA - Swing - JTree
[Perl / CGI] passer un array d'un script a un autre ?[C] passer à la ligne avec fscanf ?
[java 1.4.0] Il est passé où le fichier javac.exe ??[java] service webmail!!!!
[java] une sous-imageJava et les exceptions
[Java] Problème éxecution jar[java] code de toutes les touches
Plus de sujets relatifs à : [JAVA] Quelque difficulté à passer de C++ à Java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR