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

avec Java Discussion :

Unhandled exception type Exception


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Par défaut Unhandled exception type Exception
    Bonjour à tous,

    Je suis novice en POO bien qu'ayant un peu de base.
    Je fais un programme pour m'exercer et j'ai un soucis pour la conversion de dates.
    Encore ces S... de dates qui font perdre du temps dans n'importe quel langage.

    Le script que j'utilise pour la conversion provient d'une FAQ JAVA de ce site.
    J'ai retiré le mot-clé "static" de la méthode pour supprimer une erreur
    (je ne sais pas encore pourquoi elle était présente).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Date stringToDate(String sDate, String sFormat) throws Exception{
     
    	SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
    	return sdf.parse(sDate);		
    }
    Voici ma class:
    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
    import java.util.Locale;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class People {
    
    	private String name;
    	private String firstName;
    	private int age;
    	private Date dateOfBorn;
    	private Date dateOfDeath;
    	private String nationality;
    
    	
    	/*	GETTER & SETTER	*/
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	public Date getDateOfBorn() {
    		return dateOfBorn;
    	}
    	public void setDateOfBorn(String dateOfBorn) {
    		this.dateOfBorn = this.stringToDate(dateOfBorn, "dd-mm-yy");	
                    // Ligne en erreur.
    	}
    	
    	public Date getDateOfDeath() {
    		return dateOfDeath;
    	}
    	public void setDateOfDeath(Date dateOfDeath) {
    		this.dateOfDeath = dateOfDeath;
    	}
    	
    	public String getFirstName() {
    		return firstName;
    	}
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    	
    	public String getName() {
    		return name;
    	}	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getNationality() {
    		return nationality;
    	}
    	public void setNationality(String nationality) {
    		this.nationality = nationality;
    	}
    	
    	
    	/*	Constructeur	*/
    	public People(String name, String firstName, int age, Date dateOfBorn, Date dateOfDeath, String nationality){
    		
    		this.age = age;
    		this.dateOfBorn = dateOfBorn;
    		this.dateOfDeath = dateOfDeath;
    		this.firstName = firstName;
    		this.name = name;
    		this.nationality = nationality;
    	}
    	
           public People(){
    	}
    		
    	
    	/*	Méthodes	*/
    	public static Date stringToDate(String sDate, String sFormat) throws Exception{
            		
    		SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
    		return sdf.parse(sDate);		
    	}	
    }
    Voici le main:
    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
     
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
     
    		People actor1 = new People();
    		actor1.setAge(28);
    		actor1.setDateOfBorn("10/05/1980");
    		actor1.setFirstName("paul");
    		actor1.setName("durant");
    		actor1.setNationality("fr");
     
    		System.out.println("Acteur 1:"+
    				"\n\nnom: "+ actor1.getName() +
    				"\nprénom: "+  actor1.getFirstName() +						
    				"\nage: "+ actor1.getAge() +
    				"\ndate naissance: "+ actor1.getDateOfBorn() +
    				"\ndate décé: "+ actor1.getDateOfDeath() +
    				"\nnationalité: "+ actor1.getNationality());
    	}
     
    }
    Merci pour l'aide et la compréhension que vous pourrez m'apporter.

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    salut,

    Ce ne sont pas les dates qui te font perdre du temps, mais le mécanisme d'exception.
    Comme la méthode de parse remonte une exception potentielle, il est nécessaire de catcher cette exception à l'appel de la méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	this.dateOfBorn = People.stringToDate(dateOfBorn, "dd-mm-yy");
    } catch (Exception e) {
    	// je decide ici ce que je fait si une exception est levée
    }
    Enfin comme la méthode est static, on fait un appel static :

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Par défaut
    Citation Envoyé par visiwi Voir le message
    salut,

    Ce ne sont pas les dates qui te font perdre du temps, mais le mécanisme d'exception.
    Comme la méthode de parse remonte une exception potentielle, il est nécessaire de catcher cette exception à l'appel de la méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	this.dateOfBorn = People.stringToDate(dateOfBorn, "dd-mm-yy");
    } catch (Exception e) {
    	// je decide ici ce que je fait si une exception est levée
    }
    Enfin comme la méthode est static, on fait un appel static :
    Cela fonctionne bien.
    Et j'ai compris à quoi pouvais servir le mot "static".

  4. #4
    Membre expérimenté

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut
    Tes formats n'ont pas l'air de concorder entre ton main et ton simpledateformat.

    Dans ton main, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actor1.setDateOfBorn("10/05/1980");
    Tu t'attends a créer une date du style dd/MM/yyyy

    Tu créés ton SimpleDateFormat du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.stringToDate(dateOfBorn, "dd-mm-yy");
    Tu t'attends donc a recevoir une date de style dd-mm-yy

    Les 2 formats sont incohérents et tu as donc une exception.
    Pour que cela fonctionne, il faut changer l'un des deux formats (soit celui dans le main et écrire 10-05-80, soit écrire le format du style dd/MM/yyyy dans ta methode setDateOfBorn).
    Je te conseilles vivement la 2eme solution pour avoir une certitude sur ton année.

    Je te conseilles aussi de mettre un try/catch dans ta méthode stringToDate pour gérer directement l'exception (je la mettrais aussi dans une classe utilitaire en créant le format de manière statique mais tu n'en a pas réellement besoin pour t'exercer)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Par défaut
    Citation Envoyé par henolivier Voir le message
    Tes formats n'ont pas l'air de concorder entre ton main et ton simpledateformat.

    Dans ton main, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actor1.setDateOfBorn("10/05/1980");
    Tu t'attends a créer une date du style dd/MM/yyyy

    Tu créés ton SimpleDateFormat du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.stringToDate(dateOfBorn, "dd-mm-yy");
    Tu t'attends donc a recevoir une date de style dd-mm-yy

    Les 2 formats sont incohérents et tu as donc une exception.
    Pour que cela fonctionne, il faut changer l'un des deux formats (soit celui dans le main et écrire 10-05-80, soit écrire le format du style dd/MM/yyyy dans ta methode setDateOfBorn).
    Je te conseilles vivement la 2eme solution pour avoir une certitude sur ton année.

    Je te conseilles aussi de mettre un try/catch dans ta méthode stringToDate pour gérer directement l'exception (je la mettrais aussi dans une classe utilitaire en créant le format de manière statique mais tu n'en a pas réellement besoin pour t'exercer)
    En effet, les deux format posent problème.
    Merci pour la correction.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Par défaut
    Maintenant, j'ai un autre soucis.
    Ca à pourtant l'aire de fonctionner ailleurs, mais pas chez moi

    ma date saisie est "10-05-1980",
    mais le programme me retourne "Thu Jan 10 00:05:00 GMT+01:00 1980"
    Soit "10-01-1980"

    ???????????????????????
    D'où vient le soucis ?

  7. #7
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    henolivier t'as donnée la solution : dd/MM/yyyy ou dd-MM-yyyy suivant la cas que tu as retenu.

  8. #8
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Sur la javadoc de SimpleDateFormat, tu vois que m correspond au minute, tandis que M correspond au mois.

Discussions similaires

  1. erreur : Unhandled exception type InterruptedException
    Par the watcher dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2010, 13h10
  2. [Debutant] ]Unhandled exception type : c'est quoi ?
    Par junior68 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 30/03/2009, 22h36
  3. Réponses: 1
    Dernier message: 30/05/2007, 16h46
  4. Exception type mismatch
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 28/12/2006, 14h08
  5. [Debutant] Erreur "Unhandled event loop exception"
    Par pilz dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 08/12/2004, 15h19

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