IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[javax.comm]scan des ports d'une machine


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut [javax.comm]scan des ports d'une machine
    Bonjour

    Je cherche à faire une applie qui scanne en continue les ports de ma machine. Cela pour detecter l'ajout d'une nouvelle comm (émulateur USB port serie par ex)

    Avec javax.comm je peux scanner en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Enumeration portList = CommPortIdentifier.getPortIdentifiers();
    CommPortIdentifier portId;
    while (portList.hasMoreElements()){
    	portId = (CommPortIdentifier)portList.nextElement();
    	System.out.println(portId.getName());
    }
    Pas de souci, les ports sont scannées. Mais si je rajoute un port, celui-ci n'est pas detecter quand je relance mon scan.

    J'ai donc decidé de rajouter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Win32Driver w32Driver =  new Win32Driver();
    w32Driver.initialize();		
     
    Enumeration portList = CommPortIdentifier.getPortIdentifiers();
    CommPortIdentifier portId;
    while (portList.hasMoreElements()){
    	portId = (CommPortIdentifier)portList.nextElement();
    	System.out.println(portId.getName());
    }
    et en sortie, j'obtien:
    Scan 1:
    Scan 1:
    COM1
    LPT1
    LPT2
    COM1
    LPT1
    LPT2

    Scan2 :
    COM1
    LPT1
    LPT2
    COM1
    LPT1
    LPT2
    COM1
    COM4 (le port rajouté)
    LPT1
    LPT2
    Au scan1, les ports sont détectées deux fois. Une fois par w32Driver.initialize();
    et par CommPortIdentifier.getPortIdentifiers();.

    Au scan2, les port sont de nouveaux doublé.

    J'en deduit que CommPortIdentifier.getPortIdentifiers(); fais appelle une fois à l'initialization, range les ports trouvé dans une liste, et quand on refais appelle à lui, resort juste cette liste sans refaire d'init et retrouver d'éventuelle port rajouté. De plus à chaque initialization, les ports s'ajoute à ceux de la précedente initialization, devenant rapidement une liste ingérable au bout de dix init.

    Question, comment rafraichir la liste de port régulierment sans se retrouver avec une liste longue comme le bras?

    Si vous avez des idées, je vous en remerciert

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    En me repenchant sur le probleme, je me suis dit que pour remettre à zero la liste de port comm, la solution serai de vider la mémoire, et donc de détruire l'objet demandant le scann des ports.

    Je voudrais donc savoir s'il exite un moyen de forcé le Garbage Collector de détruire à objet. En faite, sur quoi se base t'il pour détruire un objet et liberer la mémoire?

    Si je crée un objet dans un thread, qu'ensuite je stop ce thread, le objets qu'advient-il des objet qu'y ont été construit?

    Merci

    Blaise

  3. #3
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par blaise_laporte
    Je voudrais donc savoir s'il exite un moyen de forcé le Garbage Collector de détruire à objet. En faite, sur quoi se base t'il pour détruire un objet et liberer la mémoire?
    Il n'y a aucun moyen de forcer le Garbage Collector à détruire un objet.
    Mais ce que tu peux faire c'est mettre l'objet à detruire à NULL et appeler
    seulement tu n'as aucune garantie que l'objet soit détruit juste après cet appel.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Pour tester, j'ai mis la méthode de scann de port dans un thread à part. Ce thread a une méthode finalize qui affiche un exte, ce qui me permet de bien vérifier que la classe est détruite a l'appelle du GC.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private class ListeComm1 extends Thread{
    		ListeComm1(){ start(); }
    		public void run(){
    			if(init){
    				Win32Driver w32Driver =  new Win32Driver();
    				w32Driver.initialize();
    			}
    			Enumeration portList = CommPortIdentifier.getPortIdentifiers();
    			CommPortIdentifier portId;
    			while (portList.hasMoreElements()){
    				portId = (CommPortIdentifier)portList.nextElement();
    				System.out.println(portId.getName());
    			}
    		}
    		public void finalize(){
    			System.out.println("fin thread 1");
    		}
    	}
    Donc, je fais l'appelle de ce thread, ensuite j'appelle le GC, et je refais appelle à ce thread en espérant que ma liste de port est été détruite.

    A l'affichage:

    affiche list:
    COM1
    LPT1
    LPT2
    COM1
    LPT1
    LPT2
    appelle GC:
    fin thread 1
    affiche liste:
    COM1
    LPT1
    LPT2
    COM1
    LPT1
    LPT2
    COM1
    LPT1
    LPT2
    Je constate que la liste des ports n'a pas été détruit avec la classe. Vous êtes sur le GC vide bien tous les espace mémoire?

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2008, 12h34
  2. Retrouver la liste des utilisateurs d'une machine
    Par Silverbob dans le forum VBScript
    Réponses: 0
    Dernier message: 18/07/2008, 12h05
  3. Copier des fichiers d'une machine à une autre
    Par Empty_body dans le forum Réseau
    Réponses: 3
    Dernier message: 29/10/2006, 12h44
  4. [javax.comm] Envoyer des données sur le Port série
    Par deuspi dans le forum Applets
    Réponses: 2
    Dernier message: 29/08/2006, 09h40
  5. [info] Port d'une machine
    Par deathwing dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/04/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo