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

 Java Discussion :

problème de cast


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Par défaut problème de cast
    Bonjour,

    je débute en Java et je suis en train de développer une petite appli graphique.

    J'ai différents écrans et pour chacun j'ai créé une classe. J'ai en plus d'autres classes dont la classe activities

    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
     
    import javax.swing.JOptionPane;import java.io.Serializable;
    public class activites implements Serializable {
     
    	private String code,libelle;
     
    	public activites()
    	{
    	code ="";
    	libelle="";
    	}
     
    	public activites(String code,String libelle)
    	{
    	this.code = code;
    	this.libelle= libelle;
    	}
     
    	public String getCode()
    	{
    		return code;
    	}
     
    	public void setCode(String code)
    	{
    		this.code = code;
    	}
     
    	public String getLibelle()
    	{
    		return libelle;
    	}
     
    	public void setLibelle(String libelle)
    	{
    		this.libelle = libelle;
    	}
     
        public void afficheActivites() {  
        	JOptionPane.showMessageDialog(null,"Libellé : " + libelle);    }
    }
    j'ai un écran qui permet de choisir notre activité :

    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
     
    import java.awt.FlowLayout;
    import java.awt.event.*;
    import java.sql.*;
     
    import javax.swing.*;
     
     
     
    public class ecr_choix_act implements ActionListener {
     
    	private JFrame fen = new JFrame();
    	public JComboBox liste_activite = new JComboBox();
    	public activites uneActivite = new activites();
    	public ecr_choix_act() throws SQLException
    	{
    		Connection con = null;
    	     ResultSet resultats = null;
     
     
    	     con = DriverManager.getConnection("jdbc:mysql://localhost/batonnage?zeroDateTimeBehavior=convertToNull","root","");
    	     Statement st = con.createStatement();
    	     resultats = st.executeQuery("SELECT libelle from canaux");
    	     while(resultats.next())
    	     {
    	    	 liste_activite.addItem(resultats.getString("libelle"));
    	     }
     
    		JLabel lbl_titre = new JLabel("Choix de l'activité :");
    		JButton btn = new JButton("Valider");
    		btn.addActionListener(this);
    		fen.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER,10,5));
    		fen.getContentPane().add(lbl_titre);
    		fen.getContentPane().add(liste_activite);
    		fen.getContentPane().add(btn);
    		fen.setSize(300, 200);
    		fen.setVisible(true);
    	}
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    -->erreur est à la ligne suivante
    	ecran.uneActivite = (activites)(liste_activite.getSelectedItem());
    		if(liste_activite.getSelectedIndex()==0)
    		{
    			fen.setVisible(false);
    			try {
    				ecr_batonnage e = new ecr_batonnage();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		else
    		{
    			fen.setVisible(false);
    			try {
    				ecr_choix_btq e = new ecr_choix_btq();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    		}
     
    	}
     
    }
    Je récupère cette données pour l'utiliser ensuite dans une requête sur un autre écran...

    Voici l'erreur donnée par eclipse :

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to activites
    at ecr_choix_act.actionPerformed(ecr_choix_act.java:41)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


    Mais je ne vois pas comment résoudre le problème....

    Merci de votre aide !

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to activites
    L'erreur dit que tu cherches à faire passer une "String" pour une "activites", or une "activites" n'a définitivement rien à voir avec une String (voir ton code) donc inutile de vouloir passer en force le compilateur (et non Eclipse qui sur ce coup n'y est pour rien) ne te donnera jamais raison.

    Avant de résoudre l'erreur, regardons les fauteurs de trouble.
    D'un côté, on a une JComboBox "liste_activite" qui contient une liste de libellés (sous forme de String).
    De l'autre côté, on a une variable "uneActivite" de type "activites" et pour créer une "activites" il faut un code et un libellé (deux String).

    Donc un début de solution peut être un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String libelle = liste_activite.getSelectedItem();
    String code  = ???
     
    uneActivite = new activites(code, libelle);
    PS : attention au conventions de nommage (activites -> Activites, ecr_choix_act -> EcrChoixAct, liste_activite -> listeActivite, ...), c'est plus facile à lire, pense à ceux qui lisent ton code pour t'aider par exemple.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Par défaut
    Je pense avoir réussi...
    je récupère le libellé comme tu me l'a indiqué et le code je le fournis par une requête SQL sur le libellé.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le plus "propre" est de mettre directement les activite dans la JComboBox, ainsi getSelectedItem te retournera un activite et non un String.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Par défaut
    j'alimente ma jComboBox à partir d'une base de données...
    si je comprends ce que tu dis
    il faudrait que je fasse dans ma boucle while
    1. la création d'une activité pour chaque ligne de mon résultSet
    2. et ensuite que j'ajoute cette nouvelle activité dans ma JCombo


    mais je ne pourrais pas récupéré mon selectedItem sur un autre écran sauf en utilisant une nouvelle variable ds mon void main()

Discussions similaires

  1. [CASTS]problème de cast de Time
    Par DeVoN dans le forum Langage
    Réponses: 7
    Dernier message: 22/02/2006, 17h24
  2. [JDBC Driver][JSTL] Problème de cast de données
    Par GyLes dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/09/2005, 10h00
  3. problème de cast!
    Par LaseLiep dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 09h30
  4. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Problème de casting de @IDENTITY
    Par bilb0t dans le forum Accès aux données
    Réponses: 7
    Dernier message: 03/09/2004, 09h42

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