probleme de constructeur - Java - Programmation
Marsh Posté le 23-08-2005 à 16:09:56
oui oui.
Code :
|
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.
Marsh Posté le 23-08-2005 à 16:10:05
Ca viendrait pas plutot du fait que tu initialises deux fois ?
Essaye un constructeur sans le init....
Marsh Posté le 23-08-2005 à 16:18:56
Ou bien utilise le pattern singleton dans ton code
Marsh Posté le 23-08-2005 à 16:26:06
bartleby a écrit : Ca viendrait pas plutot du fait que tu initialises deux fois ? |
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?
Marsh Posté le 23-08-2005 à 16:40:13
t'en fait quoi de ton Win32Driver apres? Et t'es pas supposé utiliser ça explicitement...
Marsh Posté le 23-08-2005 à 16:42:51
.. bref, ce n'est pas un problème de constructeur, mais à priori d'utilisation de javaxcomm ou d'énoncé
... 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".
Marsh Posté le 23-08-2005 à 17:08:35
ReplyMarsh Posté le 23-08-2005 à 17:22:40
un petit programme valant mieu qu'un grand discour :
Code :
|
Si je fais une premeier fois appelle à ce constructeur, j'obtient:
Citation : |
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 : |
ce qui me donne des port en double.
Marsh Posté le 23-08-2005 à 17:23:49
ok.
et l'appel à
|
il sert à quoi ?
Marsh Posté le 23-08-2005 à 17:32:01
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.
Marsh Posté le 23-08-2005 à 17:38:59
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
Marsh Posté le 23-08-2005 à 17:40:44
ReplyMarsh Posté le 23-08-2005 à 17:43:30
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?
Marsh Posté le 23-08-2005 à 17:53:15
mais qu'est-ce qu'il raconte
c'est TOI qui cherche trop compliqué et/ou qui ne sait pas lire la doc..
Marsh Posté le 23-08-2005 à 17:53:29
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...
Marsh Posté le 23-08-2005 à 17:53:51
j'parierais bien 100 balles sur une mauvaise installe de javaxcomm, tiens
Marsh Posté le 23-08-2005 à 18:09:40
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 :
|
puis plus loin dans le programme:
Code :
|
Cette deuxieme construction de l'objet blabla va t'elle réinitialiser toute les variables? (je pense que oui, mais j'ai un doute)
Marsh Posté le 23-08-2005 à 18:28:58
blaise_laporte a écrit : Sinon, il est possible que j'ai fais une mauvais installe de javax.comm, mais alors rien ne fonctionnerai. |
ha
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. |
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.
Marsh Posté le 24-08-2005 à 09:39:20
the real moins moins a écrit : ha
|
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.
Marsh Posté le 24-08-2005 à 10:29:11
Au diable si j'y comprend quelque chose.
Maintenant, que je fasse ceci:
Code :
|
ou ceci:
Code :
|
j'obtient la même chose, ie :
Citation : |
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.
Marsh Posté le 24-08-2005 à 12:01:50
Je viens d'essayer ton code avec rxtx sous linux, ça marche parfaitement:
/dev/ttyS1 |
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)
Marsh Posté le 24-08-2005 à 12:14:48
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.
Marsh Posté le 24-08-2005 à 12:21:42
ReplyMarsh Posté le 24-08-2005 à 13:36:05
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.
Marsh Posté le 26-08-2005 à 09:06:31
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 ?
Marsh Posté le 23-08-2005 à 15:42:58
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)
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