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

JavaFX Discussion :

erreur: JavaFX Application Thread" java.lang.ClassCastException


Sujet :

JavaFX

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut erreur: JavaFX Application Thread" java.lang.ClassCastException
    Bonsoir,
    j'ai essayé de pratiquer l'exemple qui se trouve à l'adresse:http://www.javafxapps.in/tutorial/Pe...-Database.html. le programme se compile et s'exécute sans problème. le problème survient quand je clique sur le button save. le programme lance l'erreur suivante:
    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
    Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: javafx.scene.control.TableColumn cannot be cast to javafx.scene.control.TableColumn$CellDataFeatures
    	at javafx.scene.control.cell.PropertyValueFactory.call(PropertyValueFactory.java:98)
    	at com.sun.javafx.scene.control.skin.TableRowSkin.getCell(TableRowSkin.java:80)
    	at com.sun.javafx.scene.control.skin.TableRowSkin.getCell(TableRowSkin.java:46)
    	at com.sun.javafx.scene.control.skin.TableRowSkinBase.createCell(TableRowSkinBase.java:652)
    	at com.sun.javafx.scene.control.skin.TableRowSkinBase.recreateCells(TableRowSkinBase.java:646)
    	at com.sun.javafx.scene.control.skin.TableRowSkinBase.init(TableRowSkinBase.java:145)
    	at com.sun.javafx.scene.control.skin.TableRowSkin.<init>(TableRowSkin.java:57)
    	at javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:217)
    	at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    	at javafx.scene.Node.processCSS(Node.java:8732)
    	at javafx.scene.Node.processCSS(Node.java:8725)
    	at javafx.scene.Node.processCSS(Node.java:8725)
    	at javafx.scene.Node.processCSS(Node.java:8725)
    	at javafx.scene.Node.processCSS(Node.java:8725)
    	at javafx.scene.Node.applyCss(Node.java:8825)
    	at javafx.scene.Node.impl_processCSS(Node.java:8746)
    	at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1799)
    	at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1689)
    	at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1714)
    	at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2305)
    	at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1094)
    	at javafx.scene.Parent.layout(Parent.java:1076)
    	at javafx.scene.Parent.layout(Parent.java:1082)
    	at javafx.scene.Parent.layout(Parent.java:1082)
    	at javafx.scene.Scene.doLayoutPass(Scene.java:576)
    	at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2386)
    	at com.sun.javafx.tk.Toolkit$3.run(Toolkit.java:322)
    	at com.sun.javafx.tk.Toolkit$3.run(Toolkit.java:320)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:320)
    	at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:349)
    	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:479)
    	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:460)
    	at com.sun.javafx.tk.quantum.QuantumToolkit$13.run(QuantumToolkit.java:327)
    	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    	at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
    	at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
    	at java.lang.Thread.run(Thread.java:744)
    voici la classe contrôler:
    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
    public class FXMLController implements Initializable {
     
        @FXML
        private TableView table;
        @FXML
        private TableColumn col1;
        @FXML
        private TableColumn col2;
        @FXML
        private TextField name;
        @FXML
        private TextField email;
        private ObservableList<UserData> data;
        private Connection conn;
        private Statement stm;
        private PreparedStatement prep;
        private ResultSet result;
     
        /**
         * Initializes the controller class.
         */
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            try {
                conn = CreateConnection.getConnection();
                stm = conn.createStatement();
                stm.executeUpdate(" drop table user if exists;");
                stm.executeUpdate("create table user(Name varchar(50),Email varchar(50))");
     
                data = FXCollections.observableArrayList();
     
                result = conn.createStatement().executeQuery("select *from user");
     
                while (result.next()) {
                    data.add(new UserData(result.getString("Name"), result.getString("Email")));
                }
     
                col1.setCellFactory(new PropertyValueFactory("Name"));
                col2.setCellFactory(new PropertyValueFactory("Email"));
                //table.setItems(null);
                table.setItems(data);
     
            } catch (IOException ex) {
                Logger.getLogger(FXMLController.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(FXMLController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
        @FXML
        private void saveData(ActionEvent event) throws SQLException {
     
            String query = "insert into user values(?,?);";
            prep = conn.prepareStatement(query);
            prep.setString(1, name.getText());
            prep.setString(2, email.getText());
            prep.execute();
            data.add(new UserData(name.getText(), email.getText()));
            name.setText(null);
            email.setText(null);
        }
     
    }
    la classe UserData:
    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
    public  class UserData {
     
            private StringProperty Name;
            private StringProperty Email;
     
              UserData(String Name, String Email) {
                this.Name = new SimpleStringProperty(Name);
                this.Email = new SimpleStringProperty(Email);
            }
     
            public StringProperty NameProperty() {
                return Name;
            }
     
            public StringProperty EmailProperty() {
                return Email;
            }
        }
    le fichier FXML:
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import javafx.geometry.*?>
    <?import javafx.scene.text.*?>
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>
     
    <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxdatabase.FXMLController">
        <bottom>
            <TableView fx:id="table" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
                <columns>
                    <TableColumn fx:id="col1" prefWidth="75.0" text="Name" />
                    <TableColumn fx:id="col2" prefWidth="75.0" text="Email" />
                </columns>
            </TableView>
        </bottom>
        <center>
            <GridPane BorderPane.alignment="CENTER">
                <columnConstraints>
                    <ColumnConstraints hgrow="SOMETIMES" maxWidth="290.0" minWidth="10.0" prefWidth="155.0" />
                    <ColumnConstraints hgrow="SOMETIMES" maxWidth="435.0" minWidth="10.0" prefWidth="435.0" />
                </columnConstraints>
                <rowConstraints>
                    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                </rowConstraints>
                <children>
                    <Label text="Name:" />
                    <Label text="Email" GridPane.rowIndex="1" />
                    <TextField fx:id="name" GridPane.columnIndex="1" />
                    <TextField fx:id="email" GridPane.columnIndex="1" GridPane.rowIndex="1" />
                    <Button mnemonicParsing="false" onAction="#saveData" text="save" GridPane.columnIndex="1" GridPane.rowIndex="2" />
                </children>
                <padding>
                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                </padding>
            </GridPane>
        </center>
        <top>
            <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
                <children>
                    <Label alignment="CENTER" text="Persisting table view ">
                        <font>
                            <Font size="24.0" />
                        </font>
                    </Label>
                </children>
            </HBox>
        </top>
    </BorderPane>
    la classe 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
    public class JavaFXDatabase extends Application {
     
        @Override
        public void start(Stage stage) throws IOException {
            Parent root = (Parent) FXMLLoader.load(getClass().getResource("FXML.fxml"));
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
        }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
     
    }
    le SGBD utilisé est H2 embedded.
    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Meme soucis que dans ton autre message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col1.setCellFactory(new PropertyValueFactory("Name"));
    col2.setCellFactory(new PropertyValueFactory("Email"));
    Ce n'est pas la bonne propriété qui est invoquée : setCellFactory setCellValueFactory
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 14/05/2012, 20h17
  2. Réponses: 2
    Dernier message: 09/03/2012, 17h09
  3. Erreur au lancement de programme: java.lang.ClassCastException
    Par wilfryjules dans le forum Général Java
    Réponses: 16
    Dernier message: 05/07/2011, 19h16
  4. Réponses: 2
    Dernier message: 24/02/2009, 14h24
  5. Réponses: 1
    Dernier message: 23/01/2009, 16h07

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