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

Langage Java Discussion :

Repondeur automatique - Débutant Java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 41
    Par défaut Repondeur automatique - Débutant Java
    Pourquoi?
    Suite à un accident de moto, je me retrouve dans une chaise toute la journée à developper des bouts de code ici et là et pour tout et n'importe quoi. Je bricole en C, C++, Python et quelques macro en VB. Un collegue me tanne pour commencer le java, donc je me lance sur un projet qui me tient à coeur.

    Le projet final consiste à developper un soft de répondeur automatique RTC.
    Je gère des stations de mesure automatique disséminées un peu partout, mais qui sont toutes connectées sur RTC ou GSM. Ces dernières peuvent renvoyer des alarmes à un numéro de telephone. Le but est donc de récuperer ces infos, les enregistrer et enventuellement les dispatcher par mail et/ou par SMS.

    Le pseudo algorithme serait le suivant:
    Attendre un appel
    Decrocher
    Ecouter
    Acquiter
    Racrocher
    Enregistrer les infos
    Dispatcher si necessaire

    Coté matériel et logiciel, je dispose de tout le necessaire, modem RTC externe, modem GSM, 2 ports com libres, une ligne RTC, une carte SIM,java,eclipse et internet

    Bien évidemment, je ne me lance pas d'un bloc dans ce projet, j'essaye de découper un peu le travail, donc dans un premier temps, je voudrais bien comprendre comment fonctionne l'interface modem et je bloque déjà
    Voici le code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
    import com.sun.comm.Win32Driver;
     
     
     
    public class UtilisationFlux {
    	static CommPortIdentifier portId;
    	static Enumeration portList;
    	private SerialPort sPort; //le port série
    	private BufferedReader bufRead; //flux de lecture du port
    	private OutputStream outStream; //flux d'écriture du port
     
     
     
     
    	public UtilisationFlux(String port) {
    		//initialisation du driver
    		Win32Driver w32Driver = new Win32Driver();
    		w32Driver.initialize();
    		//récupération de l'identifiant du port
    		try {
    			portId = CommPortIdentifier.getPortIdentifier(port);
    		} catch (NoSuchPortException e) {
    		}
    		//ouverture du port
    		try {
    			sPort = (SerialPort) portId.open("UtilisationFlux", 10000);
    		} catch (PortInUseException e) {
     
    		}
    		//règle les paramètres de la connexion
    		try {
    			sPort.setSerialPortParams(
    				9600,
    				SerialPort.DATABITS_8,
    				SerialPort.STOPBITS_1,
    				SerialPort.PARITY_NONE);
    		} catch (UnsupportedCommOperationException e) {
    		}
    		//récupération du flux de lecture et écriture du port
    		try {
    			outStream = sPort.getOutputStream();
    			bufRead = new BufferedReader(new InputStreamReader(sPort.getInputStream()));
    		} catch (IOException e) {
    		}
    	}
     
    	public String communique(int envoie) {
    		String poids = null;
    		try {
    			//demande de poids
    			outStream.write(envoie);
    			//lecture du poids 
    			poids = bufRead.readLine().trim();
    		} catch (IOException e) {
    		}
    		return poids;
    	}
     
    	public String communique() {
    		String poids = null;
    		String envoie = "ATD0612345678";
    		try {
    			outStream.write(41);
    			poids = bufRead.readLine().trim();
    		} catch (IOException e) {
    		}
    		return poids;
    	}
     
    	public void close(){
    		try {
    			bufRead.close();
    			outStream.close();
    		} catch (IOException e) {
    		}
    		sPort.close();
    	}
     
     
    	public static void main(String[] args) {
    		portList = CommPortIdentifier.getPortIdentifiers();
     
    		//while (portList.hasMoreElements()) {
    			portId =  (CommPortIdentifier) portList.nextElement();
    			System.out.println (portId.getName());
    		//}
     
    		UtilisationFlux conversation = new UtilisationFlux(portId.getName());
    		BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
    		int x=1;
    		try
    		{
    			//String lu = clavier.readLine();
    			while (x==1){
    				System.out.println(conversation.communique());
     
    			}
     
    		}finally
    		{
    			conversation.close();
    		}
     
     
    	}
    et l'erreur, en plus de ne pas numéroter
    COM1
    java.lang.NullPointerException
    at UtilisationFlux.<init>(UtilisationFlux.java:36)
    at UtilisationFlux.main(UtilisationFlux.java:92)
    Exception in thread "main"

    Quelqu'un a t'il eu le courage de tout lire?

  2. #2
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    Si je peux me permettre un conseil, à ta place je mettrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    } catch (NoSuchPortException e) {
    e.printStackTrace();
    		}
    dans tous tes catch. Car il n'est pas impossible que tes initialisations plantent et que certains de tes objects restent null. Je pense à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try {
    			portId = CommPortIdentifier.getPortIdentifier(port);
    		} catch (NoSuchPortException e) {
    		}
    par exemple.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par vincent63 Voir le message
    Car il n'est pas impossible que tes initialisations plantent et que certains de tes objects restent null.
    +1000

    Il ne faut JAMAIS ignorer une exception comme tu le fais là, car généralement lorsque le problème survient tu te retrouves avec un autre problème moins évident à comprendre...


    De même je conseille d'utiliser des bloc try/catch le plus grand possible et de ne pas faire un bloc par instruction comme c'est le cas dans ton code.

    Dans ton code si tu n'arrives pas à récupérer le port, tu tentes quand même de l'ouvrir. Et si tu n'arrives pas à l'ouvrir tu tentes quand même d'écrire dedans

    En général dans les traitements d'entrée/sortie comme ici, lorsque une opération échoue, c'est l'ensemble des traitements qui doivent être stopper... ce qui donnerait :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	try {
    		//récupération de l'identifiant du port
    		portId = CommPortIdentifier.getPortIdentifier(port);
     
    		//ouverture du port
    		sPort = (SerialPort) portId.open("UtilisationFlux", 10000);
     
    		//règle les paramètres de la connexion
    		sPort.setSerialPortParams(
    			9600,
    			SerialPort.DATABITS_8,
    			SerialPort.STOPBITS_1,
    			SerialPort.PARITY_NONE);
     
    		//récupération du flux de lecture et écriture du port
    		outStream = sPort.getOutputStream();
    		bufRead = new BufferedReader(new InputStreamReader(sPort.getInputStream()));
     
    	} catch (NoSuchPortException e) {
    		e.printStackTrace();
    	} catch (PortInUseException e) {
    		e.printStackTrace();
    	} catch (UnsupportedCommOperationException e) {
    		e.printStackTrace();
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    	// A la rigueur tu pourras utiliser un catch(Exception) ;)
    a++

    PS : Et bon rétablissement

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 41
    Par défaut
    Mais je t'en prie, permet toi ce genre de remarque, manquerait plus que je prenne mal des conseils aussi judicieux
    Le concept des exceptions me parait encore un peu flou (genre une exception pour moi devrait être implémenter avec des if... mais bon c'est ce qui fait une des forces de Java apparement alors

    Cet ajout me donne donc ces erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    COM1
    javax.comm.PortInUseException: Port currently owned by UtilisationFlux
    	at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
    	at UtilisationFlux.<init>(UtilisationFlux.java:31)
    	at UtilisationFlux.main(UtilisationFlux.java:98)
    java.lang.NullPointerException
    	at UtilisationFlux.<init>(UtilisationFlux.java:38)
    	at UtilisationFlux.main(UtilisationFlux.java:98)
    L'appel ne partant toujours pas
    EDIT: Normal que l'appel ne parte pas, j'ecris juste un caractere sur le port COM

  5. #5
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    Alors si j'ai le droit j'vais encore me permettre

    Voilà un lien qui devrait peut-être t'aider.

    http://www.developpez.net/forums/showthread.php?t=79552

Discussions similaires

  1. [Débutant] Java et Asm
    Par Haywire dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/03/2006, 00h22
  2. débutant JAVA+Eclipse
    Par ep31 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 12/12/2005, 14h27
  3. [Débutant][Java] Web Service
    Par ArseNic dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 14/11/2005, 11h09
  4. [Débutant] java.lang.object
    Par bonnefr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2004, 14h54
  5. [débutante][java]connection internet PPC\PC de bureau
    Par Emma20 dans le forum Développement
    Réponses: 2
    Dernier message: 19/05/2004, 14h01

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