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

Composants Java Discussion :

Problème avec un JTextField


Sujet :

Composants Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut Problème avec un JTextField
    J'ai un problème avec un JtextFiled.
    query = "SELECT REG_COD_PC,"+
    "REG_COD_IMP,"+
    "REG_COD_COM,"+
    "REG_CONT_NCC,"+
    "REG_NUM_ART,"+
    "REG_DAT_REC,"+
    "REG_MONT_REG "+
    "FROM T_REGLEMENTS ";
    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = " + (String)(Pcfield.getText())+
    " AND REG_CONT_NCC = "+(String)(NccField.getText())+ " AND REG_COD_IMP = " + (String)(ImpField.getText());
    cette requete me renvoie l'erreur suivante:
    Pcfield: 680
    ImpField: 5
    NccField: 9903111U
    DateField: 14/06/2004
    java.lang.NullPointerException
    at Bd.component.ViewReglement.search(ViewReglement.java:228)
    at Bd.component.ViewReglement.access$600(ViewReglement.java:53)
    at Bd.component.ViewReglement$2.run(ViewReglement.java:434)
    at java.lang.Thread.run(Thread.java:534)
    Load data error: java.lang.NullPointerException

    Et quand j'execute la requête sans la condition
    " AND REG_CONT_NCC = "+(String)(NccField.getText())
    j'obtient le résultat.
    Il faut noter quand la valeur de NccField n'est pas null car j'ai démandé un affichage du contenu des JTextField et elle est dans le message d'erreur ie 9903111U
    Quand je fige la valeur
    " AND REG_CONT_NCC = '9903111U'" je ne recois pas de message d'erreur mais le resultat ne s'affiche pas comme s'il etait toujours entrain de chercher

  2. #2
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Si tu fais getText() tu n'as pas besoin de caster en String.

    Je pense que ton problème vient du fait que AND REG_COD_PC, REG_CONT_NCC et AND REG_COD_IMP sont des String dans ta base

    Donc tu dois les entourer de '

    Essaye avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    query = "SELECT REG_COD_PC,"+
    "REG_COD_IMP,"+
    "REG_COD_COM,"+
    "REG_CONT_NCC,"+
    "REG_NUM_ART,"+
    "REG_DAT_REC,"+
    "REG_MONT_REG "+
    "FROM T_REGLEMENTS ";
    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = '" +Pcfield.getText()+
    "' AND REG_CONT_NCC = '"+NccField.getText()+ "' AND REG_COD_IMP = '" + ImpField.getText() +"'";
    au pire tu print ta requête et tu executes la sortie dans ton exploreur de base

  3. #3
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut Réponse
    Merci pour ta réponse mais je crois que le problème n'est pas au niveau de la synthase car quand j'execute la requete en ignorant la condition sur le reg_cont_ncc j'obtient un résultat.Le problème survient donc quand j'active le reg_cont_ncc. C'est pourquoi je n'arrive pas à comprendre car le contenu n'est pas null.J'ai tout de même essayé ce que tu as dit mais ça n'a pas marché problème de synthaxe

  4. #4
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    En regardant ta stack trace

    java.lang.NullPointerException
    at Bd.component.ViewReglement.search(ViewReglement.java:228)
    at Bd.component.ViewReglement.access$600(ViewReglement.java:53)
    at Bd.component.ViewReglement$2.run(ViewReglement.java:434)
    at java.lang.Thread.run(Thread.java:534)
    Load data error: java.lang.NullPointerException

    J'ai l'impression que tu lances ta requête dans un thread séparé et que donc tu accèdes à tes JTextField en dehors du Thread AWT, c'est ça ?
    Si oui construit ta requête dans le Thread AWT et exécute là dans un Thread séparé.

    De plus, de mémoire un JTextField.getText() ne renvoie jamais null mais "" donc ça doit être le JTextField qui doit être null

    Sinon tu n'utilises pas Eclipse par exemple, comme ça tu pourrais débuger et mettre un brekpoint sur les NullPointerException ?

    C'est quand même bien bizarre

  5. #5
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Et quand tu dis
    J'ai tout de même essayé ce que tu as dit mais ça n'a pas marché problème de synthaxe
    Tu as exécuté ta requête en dehors de Java ?
    L'erreur de syntaxe disait quoi ?

    C'est peut être tout simplement la requête qui est fausse

  6. #6
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut Réponse
    sous sql (oracle) il n'y a pas de problème la requete s'execute parfaitement

  7. #7
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Et concernant l'exécution dans un autre Thread (mon post de 10h40) ?

  8. #8
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut réponse
    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = " + (String)(Pcfield.getText())+
    //" AND REG_CONT_NCC = "+ (String)(NccField.getText())+
    " AND REG_COD_IMP = " + (String)(ImpField.getText())
    la requete avec cette clause me renvoie un resultat
    remarque: la condition sur le reg_cont_ncc est desactivée


    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = " + (String)(Pcfield.getText())+
    " AND REG_CONT_NCC = "+ (String)(NccField.getText())+
    " AND REG_COD_IMP = " + (String)(ImpField.getText())
    cette requete me renvoie l'erreur

    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = " + (String)(Pcfield.getText())+
    " AND REG_CONT_NCC = '9903111U'"+
    " AND REG_COD_IMP = " + (String)(ImpField.getText())
    Cette requete ne me renvoie pas d'erreur mais l'application semble plantée

  9. #9
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    Je ne comprends pas très bien ton message de 10 h 40min. Je ne vois pas la différence entre thread séparé et thread AWT

  10. #10
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Je crois qu'il va falloir que tu debug pour voir pas à pas ce qui se passe

    Car j'ai vraiment du mal à comprendre même les trucs qui marche car

    Si tu fais
    " AND REG_COD_PC = " + (String)(Pcfield.getText())
    cela revient à par exemple
    AND REG_COD_PC = TOTO
    or
    REG_COD_PC semble être un type String dans ta DB car tu fais Pcfield.getText()
    Pour moi ça ne devrait même pas marcher cette requête tu dois mettre des '
    AND REG_COD_PC = 'TOTO'

    Tu le fais toi même dans ton exemple tu rajoutes les '
    " AND REG_CONT_NCC = '9903111U'"
    mais pas quand tu récupères le contenu du JTextField qui est aussi une String
    " AND REG_CONT_NCC = "+ (String)(NccField.getText())


    Ensuite si l'appli semble figgé il faut voir où (debug) exécution de la requête, traitement de la requête, affichage de la requête ...
    C'est peut être ta base qui est trop grosse ou mal indexée

  11. #11
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Je ne comprends pas très bien ton message de 10 h 40min. Je ne vois pas la différence entre thread séparé et thread AWT
    Seul le Thread AWT doit accéder au contenu du GUI, à la limite dans un premier temps si tu fais un autre Thread pour exécuter ta requête ne le fait pas, même si ton GUI peut se figer, juste pour voir si le pb vient de là
    En plus ce sera plus simple pour débuger

    Pour Swing et les Threads tu as pas mal d'explication un peu partout
    Gfx, alwin, ...


    Sinon juste pour info et m'aider à t'aider c'est quoi ton niveau en Java de manière à adapter mes posts

  12. #12
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    c'esst une base de données oracle et ces mêmes requetes marchent habituellement quand on utulise les outils oracle( Forms,Report) donc je ne dis qu'il faut ecarter l'hypothèse emise sur la base. Concernant la requete les JTextField sont des string donc je me dis que le système lui même se charge du contenu de la variable s'il faut mettre des apostrophs ou pas. On fait de m^me sur Oracle quand il s'agit de variable on ne met pas la variable entre cote.

  13. #13
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    je ne sais pas comment t'indiquer mon niveau mais je vais te dire comment j'ai appris Java. Tout a commencer à l'école ou on a appris java en système repartie pour faire des appli^par exepmle communication entre des postes de travail.
    Par la suite j'ai essayé de developper tout seul avec pour doc le net mais j'avoue que je relache souvent.

  14. #14
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Oui mais là je pense vraiment que c'est à toi de mettre (ou pas) les '

    Dans les outils Oracle se sont ces mêmes outils qui le font à ta place je pense

    Sinon qu'y a-t-il à cette ligne

    java.lang.NullPointerException
    at Bd.component.ViewReglement.search(ViewReglement.java:228)

  15. #15
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    voici la methode de recherche des données ou j'exécute la requete
    private void search() {
    try {
    //*****************************************************************
    connexion = IndependanteInstance.getInstance();
    query = "SELECT REG_COD_PC,"+
    "REG_COD_IMP,"+
    "REG_COD_COM,"+
    "REG_CONT_NCC,"+
    "REG_NUM_ART,"+
    "REG_DAT_REC,"+
    "REG_MONT_REG "+
    "FROM T_REGLEMENTS ";
    connexion.open("TRESOR2",
    "sdirecp",
    "svr_rec",
    "1521",
    "RECP",
    "oracle.jdbc.driver.OracleDriver",
    "jdbc:oracle:thin:@"
    );
    // test des JTextField

    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = " + (String)(Pcfield.getText())+
    //" AND REG_CONT_NCC = "+ (String)(NccField.getText())+ //"'9903111U'"
    " AND REG_COD_IMP = " + (String)(ImpField.getText())+
    " AND TO_DATE(REG_DAT_REC,'dd/mm/yyyy') = "+ (java.sql.Date)(DateField.getText());
    //" AND TO_DATE(REG_DAT_REC,'dd/mm/yyyy') = "+ (java.sql.Date)(DateField.getText());
    //" AND TO_CHAR(REG_DAT_REC,'dd/mm/yyyy') = "+ (String)(DateField.getText());
    System.err.println("Pcfield: "+ Pcfield.getText());
    System.err.println("ImpField: "+ ImpField.getText());
    System.err.println("NccField: "+ NccField.getText());
    System.err.println("DateField: "+ DateField.getText());
    query = query + where_clause;
    ResultSet resultset =this.connexion.ExecuteQuery(query);
    boolean hasData = false;
    try {
    while (resultset.next()) {
    if (!hasData) {
    vector = new Vector();
    hasData = true;
    }
    String pc = resultset.getString(1);
    String imp = resultset.getString(2);
    String com = resultset.getString(3);
    String ncc = resultset.getString(4);
    String article = resultset.getString(5);
    java.util.Date date = resultset.getDate(6);
    long montant = resultset.getLong(7);
    vector.addElement(new StockData(pc, imp, com,ncc, article, date, montant));
    }
    resultset.close();
    if (!hasData) // We've got nothing
    m_result = 1;
    }
    catch (Exception e) {
    e.printStackTrace();
    System.err.println("Load data error: "+e.toString());
    m_result = -1;
    }

    model.setVector(vector);
    //model.addRow(ligne); // Pour ajouter une ligne au modèle
    //model.RemoveRow(ligne); // Pour retirer une ligne au modèle
    //*****************************************************************
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    catch (Exception E) {
    System.out.println("LException: " + E.getMessage());
    }


    displaySuccess("You've successfully waited ");

    searchButton.setEnabled(true);
    carder.show(cardPane, "form");
    connectionAnimation.stop();
    }

  16. #16
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    je le repete encore une fois que quand je mets les cotes le systeme me renvoie un message d'erreur : la requete ne se termine pas correctement alors que la même requete marche quand je ne mets pas les cotes
    evidemment quand je desactive la condition sur le reg_cont_ncc

  17. #17
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Bon vraiment bizarre car j'ai vérifié avec un code fonctionnant et je faisais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String query = "select * from  frameGeometry where frameId = '" + geometry.getId() + "'";
    Où geometry.getId() était une String

    Comme dit plus haut il ne te reste que le débug de ta méthode search() car on tourne en rond là

    De plus je ne comprends vraiment pas comment ça peut fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    " AND TO_DATE(REG_DAT_REC,'dd/mm/yyyy') = "+ (java.sql.Date)(DateField.getText());
    Si DateField est bien un JTextField tu vas avoir une String par exemple "12/12/2007" que tu cast en Date c'est impossible de ne pas avoir de ClassCastException
    Au pire si REG_DAT_REC est une date au format String dans ta base ne fait pas TO_DATE et compare directement les String si c'est le même format dans ton DateField (dd/mm/yyyy)

    Bref il faut débuger

  18. #18
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    Il est neccessaire de formatter la date car oracle dans sa gestion des dates vne se limite pas seulement au format dd/mm/yyyy il ajoute l'heure, la minute
    or l'utilisateur n'est pas sensé saisir tout ca

  19. #19
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Oui oui tout à fait si dans ta base le champ REG_DAT_REC est un datetime ou time stamp mais on s'égare

    Je parlais plus du (java.sql.Date)(DateField.getText()) qui cast une String en Date, c'est pas possible il faut passer par les DateFormat

    Tu dois avoir une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    Object o = "12/12/2007";
    Date d = (java.sql.Date)o;
    ...
    Donne
    Exception in thread "main" java.lang.ClassCastException: java.lang.String
    at tmp.Tmp.main(Tmp.java:35)

  20. #20
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    Merci déjà pour l'aide que tu m'a s apporté. Effectivement ta synthase marche aussi mieux en activant le reg_cont_ncc je ne recois pas d'erreur donc je pense que la tienne est meilleur. Seulement l'appli se plante et j'ai suivi ce que tu m'as dit et voilà la trace :

    Connection Ó la base
    Formation requete: clause where
    Pcfield: 680
    ImpField: 5
    NccField: 9903111U
    DateField: 14/06/2004
    Fin Formation requete
    Execution requete
    Parcours resultat requete
    Constitution vecteur
    Constitution vecteur
    Fermeture resulset
    Mise Ó jour model
    java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
    at java.util.Vector.elementAt(Vector.java:431)
    at Bd.Table.model.StockTableData.getValueAt(StockTableData.java:165)
    at javax.swing.JTable.getValueAt(JTable.java:1771)
    at javax.swing.JTable.prepareRenderer(JTable.java:3724)
    et re voici avec l'emplacement des messages
    private void search() {
    try {
    //*****************************************************************
    System.err.println("Connection à la base ");
    connexion = IndependanteInstance.getInstance();
    query = "SELECT REG_COD_PC,"+
    "REG_COD_IMP,"+
    "REG_COD_COM,"+
    "REG_CONT_NCC,"+
    "REG_NUM_ART,"+
    "REG_DAT_REC,"+
    "REG_MONT_REG "+
    "FROM T_REGLEMENTS ";
    connexion.open("TRESOR2",
    "sdirecp",
    "svr_rec",
    "1521",
    "RECP",
    "oracle.jdbc.driver.OracleDriver",
    "jdbc:oracle:thin:@"
    );
    // test des JTextField

    System.err.println("Formation requete: clause where ");
    where_clause = "WHERE REG_STAT_REG != 'A'"+
    " AND REG_COD_PC = '" + (String)(Pcfield.getText()) +"'" +
    " AND REG_CONT_NCC = '" + (String)(NccField.getText())+"'" +
    " AND REG_COD_IMP = '" + (String)(ImpField.getText())+"'" +
    " AND TO_CHAR(REG_DAT_REC,'dd/mm/yyyy') = '"+ (java.lang.String)(DateField.getText())+"'";

    System.err.println("Pcfield: "+ Pcfield.getText());
    System.err.println("ImpField: "+ ImpField.getText());
    System.err.println("NccField: "+ NccField.getText());
    System.err.println("DateField: "+ DateField.getText());

    System.err.println("Fin Formation requete ");
    query = query + where_clause;

    System.err.println("Execution requete ");
    ResultSet resultset =this.connexion.ExecuteQuery(query);
    boolean hasData = false;
    try {
    System.err.println("Parcours resultat requete ");
    while (resultset.next()) {
    if (!hasData) {
    vector = new Vector();
    hasData = true;
    }
    String pc = resultset.getString(1);
    String imp = resultset.getString(2);
    String com = resultset.getString(3);
    String ncc = resultset.getString(4);
    String article = resultset.getString(5);
    java.util.Date date = resultset.getDate(6);
    long montant = resultset.getLong(7);
    System.err.println("Constitution vecteur ");
    vector.addElement(new StockData(pc, imp, com,ncc, article, date, montant));
    }
    System.err.println("Fermeture resulset ");
    resultset.close();
    if (!hasData) // We've got nothing
    m_result = 1;
    }
    catch (Exception e) {
    e.printStackTrace();
    System.err.println("Load data error: "+e.toString());
    m_result = -1;
    }
    System.err.println("Mise à jour model ");

    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    catch (Exception E) {
    System.out.println("LException: " + E.getMessage());
    }


    displaySuccess("You've successfully waited ");

    searchButton.setEnabled(true);
    carder.show(cardPane, "form");
    connectionAnimation.stop();
    }

Discussions similaires

  1. Problème avec mon JTextField
    Par aljessy dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 24/06/2013, 09h12
  2. Problème avec un JTextField
    Par aljessy dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 31/05/2011, 13h12
  3. Problème avec un JTextField
    Par Wamdeus dans le forum Composants
    Réponses: 14
    Dernier message: 30/12/2007, 23h17
  4. Problème avec un JTextField (Event)
    Par Mike888 dans le forum Composants
    Réponses: 3
    Dernier message: 24/06/2007, 16h11
  5. problème avec JTextField
    Par hammag dans le forum Composants
    Réponses: 3
    Dernier message: 15/05/2006, 14h39

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