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

Collection et Stream Java Discussion :

Cannot format given Object as a Date


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Par défaut Cannot format given Object as a Date
    Bonjour à tous, c'est mon premier post sur ce forum, j'espère ne pas me tromper au niveau de l'emplacement !

    Voila, je viens à vous car pour cette fin d'année, je dois rendre un projet en Java. Voila mon problème : Je veux afficher un listing de mes véhicules (présent dans la BD liée au projet), je fais donc ma requête SQL, jusque là tout va bien. Le programme se lance très bien, mais quand je clique sur l'onglet "Listing", la ça plante et ça me met ceci comme erreur :

    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
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Date
    	at java.text.DateFormat.format(DateFormat.java:310)
    	at java.text.Format.format(Format.java:157)
    	at javax.swing.JTable$DateRenderer.setValue(JTable.java:5368)
    	at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:257)
    	at javax.swing.JTable.prepareRenderer(JTable.java:5723)
    	at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
    	at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016)
    	at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812)
    	at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    	at javax.swing.JComponent.paintComponent(JComponent.java:780)
    	at javax.swing.JComponent.paint(JComponent.java:1056)
    	at javax.swing.JComponent.paintChildren(JComponent.java:889)
    	at javax.swing.JComponent.paint(JComponent.java:1065)
    	at javax.swing.JViewport.paint(JViewport.java:728)
    	at javax.swing.JComponent.paintChildren(JComponent.java:889)
    	at javax.swing.JComponent.paint(JComponent.java:1065)
    	at javax.swing.JComponent.paintChildren(JComponent.java:889)
    	at javax.swing.JComponent.paint(JComponent.java:1065)
    	at javax.swing.JComponent.paintChildren(JComponent.java:889)
    	at javax.swing.JComponent.paint(JComponent.java:1065)
    	at javax.swing.JComponent.paintChildren(JComponent.java:889)
    	at javax.swing.JComponent.paint(JComponent.java:1065)
    	at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    	at javax.swing.JComponent.paintChildren(JComponent.java:889)
    	at javax.swing.JComponent.paint(JComponent.java:1065)
    	at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
    	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
    	at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
    	at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
    	at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
    	at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
    	at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
    	at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
    	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
    	at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
    	at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
    	at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
    	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    	at java.awt.EventQueue.access$500(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.awt.EventQueue$3.run(EventQueue.java:703)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    Je ne sais pas s'il vous faut du code, si oui, je me ferais un plaisir de vous le montrer. J'espère que quelqu'un pourra m'aider..

    Cordialement, Florian.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a une colonne dans la JTable qui est typée java.util.Date, mais il y a une donnée dans cette colonne qui n'est pas du type Date. Lorsque le renderer associé à la colonne essaye de formater la date pour l'afficher, il dit qu'il ne peut pas parce que ce n'est pas une date.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Par défaut
    Bonjour et merci pour votre réponse si rapide !

    J'ai beau chercher, je ne vois vraiment pas où j'ai fais mon erreur... Est-ce que je peux vous envoyer mon projet en .rar ? Un avis extérieur est toujours le bienvenue..

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tout le projet ne sera pas utile. Mets-nous dans ton prochain message les sources du :
    1. du Tablemodel de la table
    2. de l'initialisation de la JTable, si tu y affectes des renderers explicitement
    3. le code avec la requête SQL, le parcours du ResultSet, et le chargement des données dans la JTable
    4. le descriptif de la table (les colonnes et leur type)


    Déjà, première question : est-ce que tu as défini une colonne de type Date ? A quelle colonne dans ta requête cette colonne correspond-t-elle ? La colonne correspondant dans la table est-elle du type Date ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Par défaut
    J'ai vu des postes avec du code copié mais je n'ai pas trouvé comment faire autrement..

    1) Tablemodel de la table

    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
    public class AllVehicule extends AbstractTableModel {
     
        private ArrayList<String> nomsColonnes = new ArrayList<String>();
        private ArrayList<Vehicule> contenu = new ArrayList<Vehicule>();
     
        public AllVehicule(ArrayList<Vehicule> voiture)
        {
            contenu = voiture;
            nomsColonnes.add("NumChassis");
            nomsColonnes.add("Plaque");
            nomsColonnes.add("Carburant");
            nomsColonnes.add("Societe");
            nomsColonnes.add("Cylindree");
            nomsColonnes.add("Lpg");
            nomsColonnes.add("DateDebutReparation");  
        }
     
        @Override
        public int getColumnCount()
        {
            return nomsColonnes.size();
        }
     
        public int getRowCount()
        {
            return contenu.size();
        }
     
        @Override
        public String getColumnName(int col)
        {
            return nomsColonnes.get(col);
        }
     
        @Override
        public Object getValueAt(int row, int col)
        {
            Vehicule voiture = contenu.get(row);
            switch(col)
            {
                case 0 : return voiture.getNChassis();
                case 1 : return voiture.getPlaque();
                case 2 : return voiture.getCarburant();
                case 3 : return voiture.getCylindree();
                case 4 : return voiture.getSociete();
                case 5 : return voiture.getLpg();
                case 6 : return voiture.getDateDebRepa();
                default : return null;
            }
        }
     
        @Override
        public Class getColumnClass(int col)
        {
            Class c;
            switch(col)
            {
                case 0 : c = String.class;
                    break;
                case 1 : c = String.class;
                    break;
                case 2 : c = String.class;
                    break;
                case 3 : c = String.class;
                    break;
                case 4 : c = Integer.class;
                    break;
                case 5 : c = Boolean.class;
                    break;
                case 6 : c = Date.class;
                    break;
                default : c = String.class;
            }
            return c;
        }
    }
    2) Initialisation de la JTable

    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
    public PanelListing()
        {
            this.setLayout(new BorderLayout());
     
            controle = new ApplicationControlleur();
     
            this.setLayout(new BorderLayout());
            this.setBorder(BorderFactory.createTitledBorder("Listing des véhicules"));
     
            try {
                voiture = new AllVehicule(controle.listingVehicule());
            } catch (SQLException ex) {
                Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NamingException ex) {
                Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            } catch (AjoutException ex) {
                Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            tableListing = new JTable(voiture);
     
            //TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableListing.getModel());
            //tableListing.setRowSorter(sorter);
     
            barreDefilante = new JScrollPane(tableListing);
     
            this.add(tableListing);
            this.add(barreDefilante, BorderLayout.CENTER);
     
        }
    3) Code la requète

    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
    public class Listing implements InterfaceListing {
     
        @Override
        public ArrayList<Vehicule> listingVehicule() throws SQLException, NamingException, AjoutException
        {
            ArrayList<Vehicule> arrayVehicule = new ArrayList<Vehicule>();
     
            Connection connexion = SingletonConnection.connexionBD();
            String requeteSQL = "SELECT numChassis, cylindree, plaque, carburant, dateDebRepa, lpg, societe from Vehicule";       
            PreparedStatement prepStat = connexion.prepareStatement(requeteSQL);
            ResultSet donnees = prepStat.executeQuery();
            while(donnees.next())
            {
     
                String numChassis = donnees.getString(1);
                int numeroCyl = donnees.getInt(2);
                Integer cylindre = new Integer(numeroCyl);
                String plaque = donnees.getString(3);
                String carburant = donnees.getString(4);
                java.sql.Date dateDeb = donnees.getDate(5);
                GregorianCalendar dateReparation = new GregorianCalendar();
                dateReparation.setTime(dateDeb);
                boolean lpgBool = donnees.getBoolean(6);
                Boolean lpg = new Boolean(lpgBool);
                String societe = donnees.getString(7);
     
                arrayVehicule.add(new Vehicule(numChassis, plaque, carburant, societe, cylindre, lpg, dateReparation));
            }
     
            return arrayVehicule;
        }
    }
    4) Nom : table vehicule.png
Affichages : 1501
Taille : 20,8 Ko

    Oui j'ai définis une colonne de type Date. J'ai bien vérifié que les requètes, les arguments du constructeur Véhicule, et l'ordre des colonnes correspondent bien.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Par défaut
    J'ai remarqué un soucis dans l'ordre dans la classe AllVehicule, je l'ai donc modifié, ce qui donne ceci :

    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
    public class AllVehicule extends AbstractTableModel {
     
        private ArrayList<String> nomsColonnes = new ArrayList<String>();
        private ArrayList<Vehicule> contenu = new ArrayList<Vehicule>();
     
        public AllVehicule(ArrayList<Vehicule> voiture)
        {
            contenu = voiture;
            nomsColonnes.add("NumChassis");
            nomsColonnes.add("Cylindree");
            nomsColonnes.add("Plaque");
            nomsColonnes.add("Carburant");
            nomsColonnes.add("DateDebutReparation");
            nomsColonnes.add("Lpg");
            nomsColonnes.add("Societe");
        }
     
        @Override
        public int getColumnCount()
        {
            return nomsColonnes.size();
        }
     
        public int getRowCount()
        {
            return contenu.size();
        }
     
        @Override
        public String getColumnName(int col)
        {
            return nomsColonnes.get(col);
        }
     
        @Override
        public Object getValueAt(int row, int col)
        {
            Vehicule voiture = contenu.get(row);
            switch(col)
            {
                case 0 : return voiture.getNChassis();
                case 1 : return voiture.getCylindree();
                case 2 : return voiture.getPlaque();
                case 3 : return voiture.getCarburant();
                case 4 : return voiture.getDateDebRepa();
                case 5 : return voiture.getLpg();
                case 6 : return voiture.getSociete();
                default : return null;
            }
        }
     
        @Override
        public Class getColumnClass(int col)
        {
            Class c;
            switch(col)
            {
                case 0 : c = String.class;
                    break;
                case 1 : c = Integer.class;
                    break;
                case 2 : c = String.class;
                    break;
                case 3 : c = String.class;
                    break;
                case 4 : c = Date.class;
                    break;
                case 5 : c = Boolean.class;
                    break;
                case 6 : c = String.class;
                    break;
                default : c = String.class;
            }
            return c;
        }
    }
    Quand je clique sur Listing, il charge, mais ne m'affiche plus les noms de colonnes, ni le contenu.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu convertis le java.sql.Date en GregorianCalendar. Pourquoi faire ça ? Stocke la propriété "date de réparation" dans le type Date. Tu peux directement utiliser la valeur de type java.sql.Date.
    Tu peux également récupérer la date dans le type java.util.Date par la méthode getTime() de Calendar.

    On ne peut formater en tout cas des instances de Calendar par un DateFormat.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cannot format given Object as a Date
    Par SAKDOSS dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/02/2011, 16h38
  2. Formater avec String.Format un nombre ou une date
    Par bubulemaster dans le forum Débuter
    Réponses: 2
    Dernier message: 29/06/2008, 19h00
  3. format saisie de champs type DATE
    Par dohamsg dans le forum Firebird
    Réponses: 1
    Dernier message: 31/08/2007, 09h59
  4. [MySQL] le format idéal pour stocker des dates avec l'heure
    Par Philoulheinz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/02/2007, 21h53
  5. [MySQL] Faire un INSERT d'une date format Francais dans un champ date '0000-00-00' ?
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/11/2006, 13h49

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