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

  FORUM HardWare.fr
  Programmation
  Java

  probleme de constructeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de constructeur

n°1182427
blaise_lap​orte
Posté le 23-08-2005 à 15:42:58  profilanswer
 

Voila, j'ai un probleme avec un constructeur.
 
Quand je construit un objet, il me detecte tout les port présent sur la machine. Mais si j'ai besoin de reconstruire ce même objet (sans changer son nom), il me detecte les port present sur la machine en plus de ceux qu'il avait détecté lors de la premiere fois, ce qui fais que j'ai des port en double.
 
Voici le code du constructeur (API javax.comm)

Code :
  1. public GestionComm(){
  2. Win32Driver w32Driver = new Win32Driver();
  3. w32Driver.initialize();
  4. }


 
Je pense qu'il faudrait que je puisse détruire le premier objet gestionComm que j'ai créé, mais je ne sais pas comment faire.


Message édité par blaise_laporte le 23-08-2005 à 16:06:17
mood
Publicité
Posté le 23-08-2005 à 15:42:58  profilanswer
 

n°1182470
victorus_e​cl
PIBCAK
Posté le 23-08-2005 à 16:02:06  profilanswer
 

Tu reconstruis bien ton objet avec new ?

n°1182483
blaise_lap​orte
Posté le 23-08-2005 à 16:09:56  profilanswer
 

oui oui.
 

Code :
  1. private GestionComm maComm;
  2. ...
  3. public void methode1(){
  4. maComm = new GestionComm();
  5. ...}


 
Le probleme se pose donc si je fais appelle plusieur fois à méthode 1. Il faudrait que je puisse "détruire" maComm avant de le reconstruire.
 
 
 

n°1182484
bartleby
Posté le 23-08-2005 à 16:10:05  profilanswer
 

Ca viendrait pas plutot du fait que tu initialises deux fois ?
 
Essaye un constructeur sans le init....

n°1182499
nerisson
Pic-pic
Posté le 23-08-2005 à 16:18:56  profilanswer
 

Ou bien utilise le pattern singleton dans ton code


---------------
Light is right
n°1182515
blaise_lap​orte
Posté le 23-08-2005 à 16:26:06  profilanswer
 

bartleby a écrit :

Ca viendrait pas plutot du fait que tu initialises deux fois ?
 
Essaye un constructeur sans le init....


 
C'est justement l'initialisation qui me detecte le port présent. Si je le retire, je n'ai plus rien du tout. Mais en effet, c'est bien la deuxieme initialisation qui fais que j'ai des port en double.
 
Heu...
c'est quoi le pattern singleton?

n°1182542
the real m​oins moins
Posté le 23-08-2005 à 16:40:13  profilanswer
 

t'en fait quoi de ton Win32Driver apres? Et t'es pas supposé utiliser ça explicitement...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1182544
the real m​oins moins
Posté le 23-08-2005 à 16:42:51  profilanswer
 

.. bref, ce n'est pas un problème de constructeur, mais à priori d'utilisation de javaxcomm ou d'énoncé :p
 
... par exemple.. qu'est-ce que tu entends par "il me detecte les port present sur la machine en plus de ceux qu'il avait détecté lors de la premiere fois, ce qui fais que j'ai des port en double".
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1182553
blaise_lap​orte
Posté le 23-08-2005 à 16:46:01  profilanswer
 

je vois pas ce que tu veux dire...

n°1182596
the real m​oins moins
Posté le 23-08-2005 à 17:08:35  profilanswer
 

Ca tombe bien, moi non plus [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 23-08-2005 à 17:08:35  profilanswer
 

n°1182616
blaise_lap​orte
Posté le 23-08-2005 à 17:22:40  profilanswer
 

un petit programme valant mieu qu'un grand discour :
 

Code :
  1. public GestionComm(){
  2. //initialisation du driver
  3. Win32Driver w32Driver= new Win32Driver();
  4. w32Driver.initialize();
  5. //récupération de l'énumération
  6. Enumeration portList=CommPortIdentifier.getPortIdentifiers();
  7. //affichage des noms des ports
  8. CommPortIdentifier portId;
  9. while (portList.hasMoreElements()){
  10. portId=(CommPortIdentifier)portList.nextElement();
  11. System.out.println(portId.getName());
  12. }
  13. }


 
Si je fais une premeier fois appelle à ce constructeur, j'obtient:

Citation :


COM1
LPT1
LPT2


 
Si je fais appelle une deuxieme fois appelle à ce constructeur dans le même programme (pour detecter le nouveau port USB-seri que j'ai branché par exemple), j'obtient:

Citation :


COM1
LPT1
LPT2
COM1
COM4 (le port usb-serie)
LPT1
LPT2


ce qui me donne des port en double.


Message édité par blaise_laporte le 23-08-2005 à 17:23:04
n°1182618
the real m​oins moins
Posté le 23-08-2005 à 17:23:49  profilanswer
 

ok.
et l'appel à


 Win32Driver w32Driver= new Win32Driver();
 w32Driver.initialize();


il sert à quoi ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1182626
blaise_lap​orte
Posté le 23-08-2005 à 17:32:01  profilanswer
 

d'aprés la doc de la méthode initialize:
 

Citation :

initialize() will be called by the CommPortIdentifier's static initializer. The responsibility of this method is: 1) Ensure that that the hardware is present. 2) Load any required native libraries. 3) Register the port names with the CommPortIdentifier.


 
Cette initialisation est indispensable pour pouvoir utilisé les port avec javax.comm.

n°1182630
souk
Tourist
Posté le 23-08-2005 à 17:38:59  profilanswer
 

donc tu n'as pas à appeler initialize(), c'est ecrit noir sur blanc non ?
 
cela dit, je sais pas si ca va résoudre ton probleme [:joce]


Message édité par souk le 23-08-2005 à 17:39:40
n°1182632
the real m​oins moins
Posté le 23-08-2005 à 17:40:44  profilanswer
 

...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1182634
blaise_lap​orte
Posté le 23-08-2005 à 17:43:30  profilanswer
 

Ben, si je n'appelle pas initialize, il ne me detecte pas les com...  
 
Mais je pense que nous cherchons trop compliqué.  
Simplement, comment pourrai-je faire pour détruire un objet pour en reconstruire un autre avec le même nom?

n°1182637
the real m​oins moins
Posté le 23-08-2005 à 17:53:15  profilanswer
 

mais qu'est-ce qu'il raconte [:ciler]
c'est TOI qui cherche trop compliqué et/ou qui ne sait pas lire la doc..


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1182638
bartleby
Posté le 23-08-2005 à 17:53:29  profilanswer
 

Heu, comme ils te l'ont dit, tu ne dois pas utiliser initialize.
 
Enleve "w32Driver.initialize();" !
 
Quand tu appels "CommPortIdentifier.getPortIdentifiers();", c'est la ou meme avant que ton truc s'initialise...


Message édité par bartleby le 23-08-2005 à 17:54:27
n°1182639
the real m​oins moins
Posté le 23-08-2005 à 17:53:51  profilanswer
 

j'parierais bien 100 balles sur une mauvaise installe de javaxcomm, tiens


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1182657
blaise_lap​orte
Posté le 23-08-2005 à 18:09:40  profilanswer
 

Ben, si j'enleve initialize(), aucun port n'est détécté.
 
Le code est directement copier de ce tutorial : http://christophej.developpez.com/ [...] /javacomm/ et il y a bien initialize().
 
Sinon, il est possible que j'ai fais une mauvais installe de javax.comm, mais alors rien ne fonctionnerai.
 
Sinon, question general, si on fais deux fois appelle à un constructeur  
 

Code :
  1. private MonOBjet blabla;
  2. ...
  3. blabla = new MonObjet();


 
puis plus loin dans le programme:

Code :
  1. blabla = new MonObjet();


 
Cette deuxieme construction de l'objet blabla va t'elle réinitialiser toute les variables? (je pense que oui, mais j'ai un doute)
 
 

n°1182667
the real m​oins moins
Posté le 23-08-2005 à 18:28:58  profilanswer
 

blaise_laporte a écrit :

Sinon, il est possible que j'ai fais une mauvais installe de javax.comm, mais alors rien ne fonctionnerai.


ha [:autobot]
 
Bon et rapport à ton article...

Citation :

La dll est à mettre dans le répertoire Windows/system32, le fichier comm.jar et le fichier javax.comm.properties sont à mettre avec les autres librairies externes de votre application. Il ne faut pas toucher au fichier de configuration.


[:icon4] Faux ! le properties doit aller dans JDK_HOME/jre/lib/javax.comm.properties  
Fais ça, enleve ton appel absurde au WinDriver machin, et on revoit ça.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1183023
blaise_lap​orte
Posté le 24-08-2005 à 09:39:20  profilanswer
 

the real moins moins a écrit :

ha [:autobot]
 
Bon et rapport à ton article...

Citation :

La dll est à mettre dans le répertoire Windows/system32, le fichier comm.jar et le fichier javax.comm.properties sont à mettre avec les autres librairies externes de votre application. Il ne faut pas toucher au fichier de configuration.


[:icon4] Faux ! le properties doit aller dans JDK_HOME/jre/lib/javax.comm.properties  
Fais ça, enleve ton appel absurde au WinDriver machin, et on revoit ça.


 
Oki!
Je l'avais mis dans J2SDK\lib et non dans J2SDK\jre\lib...
Encore un truc que j'aurais apris grace à ce forum!
 
Mais du coup, si j'enleve w32Driver.initialize();
les nouvelles comme ne sont pas detectée si je relance le constructeur.
Mais si je laisse initialize, les comme sont en double (ce qui maintenant me parait normal) mais il detecte si j'en branche une nouvelle.

n°1183067
blaise_lap​orte
Posté le 24-08-2005 à 10:29:11  profilanswer
 

Au diable si j'y comprend quelque chose.
 
Maintenant, que je fasse ceci:
 

Code :
  1. import javax.comm.*;
  2. import com.sun.comm.Win32Driver;
  3. import java.util.*;
  4. import java.io.*;
  5. public class TestComm {
  6. public static void main (String [] args){
  7.  //initialisation du driver
  8.  Win32Driver w32Driver =  new Win32Driver();
  9.  w32Driver.initialize();
  10.  Enumeration portList = CommPortIdentifier.getPortIdentifiers();
  11.  CommPortIdentifier portId;
  12.  while (portList.hasMoreElements()){
  13.   portId = (CommPortIdentifier)portList.nextElement();
  14.   System.out.println(portId.getName());
  15.  }
  16. }
  17. }


 
ou ceci:

Code :
  1. import javax.comm.*;
  2. import com.sun.comm.Win32Driver;
  3. import java.util.*;
  4. import java.io.*;
  5. public class TestComm {
  6. public static void main (String [] args){
  7.  Enumeration portList = CommPortIdentifier.getPortIdentifiers();
  8.  CommPortIdentifier portId;
  9.  while (portList.hasMoreElements()){
  10.   portId = (CommPortIdentifier)portList.nextElement();
  11.   System.out.println(portId.getName());
  12.  }
  13. }
  14. }


 
j'obtient la même chose, ie :
 

Citation :


COM1
LPT1
LPT2
COM1
LPT1
LPT2


 
avec des comm detecté deux fois.
 
Pour le premier cas, je veux bien, étant donné que j'initialise deux fois (une fois avec initialize et une deuxieme fois avec CommPortIdentifier.getPortIdentifiers()) mais je comprend pas pourquoi avec le deuxieme code, les comm apparraissent deux fois.


Message édité par blaise_laporte le 24-08-2005 à 10:29:52
n°1183192
the real m​oins moins
Posté le 24-08-2005 à 12:01:50  profilanswer
 

Je viens d'essayer ton code avec rxtx sous linux, ça marche parfaitement:

/dev/ttyS1
/dev/ttyS0
/dev/lp0


 
Vire l'import du WinDriver, des fois qu'il aurait des crasses initializées en static
 
(pour info, rxtx a exactement la meme api que javaxcomm - aux noms de package près - et fonctionne sous linux, windows et ptet meme mac)


Message édité par the real moins moins le 24-08-2005 à 12:09:02

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1183217
blaise_lap​orte
Posté le 24-08-2005 à 12:14:48  profilanswer
 

En effet, c'est moi qui me suis planté.  
 
Par contre, suite à plusieurs tests, je me suis rendu qui compte que CommPortIdentifier.getPortIdentifiers()ne semble enrengistrer les ports de la machine qu'une seul fois et qu'ensuite, il se contente de retourner lire ce qu'il a enrengistré précedement. Ce qui fais que s'il y a un nouveau port, il ne le detecte pas.


Message édité par blaise_laporte le 24-08-2005 à 12:16:01
n°1183230
the real m​oins moins
Posté le 24-08-2005 à 12:21:42  profilanswer
 

ouais :/


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1183256
lorill
Posté le 24-08-2005 à 12:32:44  profilanswer
 

HS: t'as eu le même prof de philo que moi ?

n°1183344
blaise_lap​orte
Posté le 24-08-2005 à 13:36:05  profilanswer
 

En faite, ce qu'il faudrai que je parvienne à faire, ce serai de lui suprimer toute les ports qu'il a détecté.
 
Je pensais donc que suprimer l'objet pourrai me le permettre; mais je ne sais pas comment faire pour suprimé manuelement un objet.

n°1184811
Profil sup​primé
Posté le 26-08-2005 à 09:06:31  answer
 

Je dis peut-être une bêtise ( les cours de java sont un peu loin ), donc corrigez moi si je me trompe :
un appel à la méthode "finalize()" ne détruirait-elle pas l'objet en question ?

n°1184815
lorill
Posté le 26-08-2005 à 09:09:19  profilanswer
 

non

mood
Publicité
Posté le   profilanswer
 


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

  probleme de constructeur

 

Sujets relatifs
Probleme avec mes liensProbleme de preload apres série anticipée de loadMovie();
Problème de frames [résolu]probleme de fonctionnement : 2datagrid avec chacun un buoton de cmd
Probleme de _root ou goto je sais pas trop :(probleme de flux rss . Les site en html peuvent pas l'afficher
[C++] problème de constructeur ?Petit problème avec un héritage : constructeur incorrect ?
problème de constructeur class & cieproblème de constructeur sous vc
Plus de sujets relatifs à : probleme de constructeur


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