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 :

Erreur lors de l'utilisation d'un JTextField


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 351
    Par défaut Erreur lors de l'utilisation d'un JTextField
    Je rencontre une erreur de type java.lang.NullPointerException lors de l'utilisation d'un JTextField.

    declaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private JTextField Pcfield;
    initialisation de la JTextField dans une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public Component buildPanel() {
    builder.add(Pcfield = new JTextField(15), cc.xy(3, 3));
    return cardPane;
    }
    affichage du contenu script lier à un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void search() {
    System.err.println("PC: "+ Pcfield.getText());
    }
    erreur renvoyé
    java.lang.NullPointerException
    at Bd.component.ViewReglement.search(ViewReglement.java:217)
    at Bd.component.ViewReglement.access$700(ViewReglement.java:52)
    at Bd.component.ViewReglement$2.run(ViewReglement.java:398)
    at java.lang.Thread.run(Thread.java:534)
    Load data error: java.lang.NullPointerException

  2. #2
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    A tous les coups ton Pcfield est null.

    Est-ce qu'il est initialisé quand tu l'utilise dans ton search() ?

    EDIT : Je reformule : Est-ce que buildPanel est appelé AVANT le premier appel à search() ?

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 351
    Par défaut Reponse
    Non il est initialisé dans la méthode buildPanel()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Component buildPanel() {
    builder.add(Pcfield = new JTextField(15), cc.xy(3, 3));
    }
    C'est en même temps cette méthode qui permet de l'afficher

  4. #4
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    L'exception est levée à cette ligne (A moins que tu n'ais simplifié ta méthode pour la poster ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.err.println("PC: "+ Pcfield.getText());
    Ou est-ce qu'on pourrait avoir une nullPointerException ?
    Sur le err ? J'en doute, à moins que tu n'ais fait un System.setErr(null).

    Il ne reste que le Pcfield.

    Donc je réitère : regarde à fond pour vérifier que ton search() n'est pas appelé une fois avant ton buildPanel()
    Met un petit System.out.println() dans ces 2 méthodes pour vérifier laquelle est appelée en premier.

    Si ce n'est pas ça, tu viens de tomber sur un mystère digne de X-Files.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 351
    Par défaut Reponse
    voici le code
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
     
    public class ViewReglement implements QuitListener {
     
    private StockTableData model;
    private AnimatedPanel connectionAnimation;
    private CardLayout carder;
    private JPanel cardPane;
    private JLabel info;
    private JButton searchButton;
    private JTextField Pcfield;
    private JTextField DateField;
    private JTextField ImpField;
    private JTextField NccField;
    private FrameModele parent;
    protected IConnexion connexion;
    protected String query;
    protected String where_clause ;
    Vector vector;
    protected int m_result = 0;
     
    public ViewReglement(FrameModele parent) {
    this.parent = parent;
    this.parent.addQuitListener(this);
    }
     
    /**
    * Cherche ordre de vente.
    * 
    * @author Romain Guy
    */
    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
     
     
    System.err.println("PC: "+ Pcfield.getText());
    System.err.println("IMPOT: "+ ImpField.getText());
    query = query + "WHERE REG_STAT_REG != 'A'" +
    " AND REG_COD_PC = "+ (String)(Pcfield.getText())+//"680"+ // (String)(Pcfield.getText()) + //680" +
    " AND REG_COD_IMP = "+ "5"; // (String)(ImpField.getText()) ;//5" ; 
    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);
    //*****************************************************************
    } 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();
    }
     
    /**
    * Affiche un message de succès.
    * 
    * @param text Le message Ã* afficher
    */
    private void displaySuccess(String text) {
    info.setIcon(UIHelper.readImageIcon("success.png"));
    info.setText(text);
    }
     
    /**
    * Affiche un message d'avertissement.
    * 
    * @param text Le message Ã* afficher
    */
    private void displayWarning(String text) {
    info.setIcon(UIHelper.readImageIcon("warning.png"));
    info.setText(text);
    }
     
    /**
    * Affiche un message d'erreur.
    * 
    * @param text Le message Ã* afficher
    */
    private void displayFailure(String text) {
    info.setIcon(UIHelper.readImageIcon("failure.png"));
    info.setText(text);
    }
     
    /**
    * Crée un formulaire de visualisation de commande dans un JPanel.
    * 
    * @return Un panneau contenant le formulaire de saisie d'une commande
    * @author Romain Guy
    */
    public Component buildPanel() {
    FormLayout layout =
    new FormLayout("right:pref, 3dlu, pref, 7dlu, right:pref, 3dlu, pref, 7dlu, right:pref", // colonnes
    "p, 3dlu, p,3dlu, p, 3dlu,p, 9dlu, p, " + // lignes
    "9dlu, fill:default, 3dlu, p"); // lignes
     
    PanelBuilder builder = new PanelBuilder(layout);
    builder.setDefaultDialogBorder();
     
    model = new StockTableData();
    JTable itemsTable = new JTable(model);
    JScrollPane scrollPane = new JScrollPane(itemsTable);
    scrollPane.setOpaque(false);
    scrollPane.getViewport().setOpaque(false);
    scrollPane.setViewportBorder(null);
     
    searchButton = UIHelper.createButton("Search");
    searchButton.addActionListener(new SearchAction());
     
    info = new JLabel(" ");
    info.setPreferredSize(new java.awt.Dimension(600, 16));
     
    CellConstraints cc = new CellConstraints();
    builder.addSeparator("Critères de recherche", cc.xyw(1, 1, 9)).setOpaque(false);
     
    builder.addLabel("Poste:", cc.xy(1, 3));
    builder.add(Pcfield = new JTextField(15), cc.xy(3, 3));
    builder.addLabel("Impôt:", cc.xy(5,3));
    builder.add(ImpField = new JTextField(15), cc.xy(7, 3));
    builder.add(searchButton, cc.xy(9, 3, "left, default"));
    builder.addLabel("Contribuable:", cc.xy(1, 5));
    builder.add(NccField = new JTextField(15), cc.xy(3, 5));
    builder.addLabel("Date :", cc.xy(5, 5));
    builder.add(DateField = new JTextField(15), cc.xy(7, 5));
     
    builder.addSeparator("Détails des règlements", cc.xyw(1, 9, 9)).setOpaque(false);
     
    builder.add(scrollPane, cc.xyw(1, 11, 9));
    builder.add(info, cc.xyw(1, 13, 9, "left, fill"));
     
    //documentDate.setEnabled(false);
    //deliveryDate.setEnabled(false);
    //purchaseOrder.setEnabled(false);
    //itemsTable.setEnabled(false);
     
    JPanel form = builder.getPanel();
    form.setOpaque(false);
    setDefaultValues();
     
    cardPane = new JPanel(carder = new CardLayout());
    cardPane.setOpaque(false);
    cardPane.add("form", form);
     
    connectionAnimation =
    new AnimatedPanel(
    "Sending the request to the remote system...",
    UIHelper.readImageIcon("network.png"));
    cardPane.add("animation", connectionAnimation);
     
    return cardPane;
    }
     
    /**
    * Donne des valeurs par défauts aux champs du formulaire.
    */
    private void setDefaultValues() {
    //Pcfield.setText("832");
    DateField.setText("15/01/2006"); 
    ImpField.setText("4"); 
    NccField.setText("9511970B");
     
    }
     
    /**
    * Réinitialise le formulaire.
    */
    private void resetValues() {
    Pcfield.setText("");
    DateField.setText("");
    ImpField.setText("");
    NccField.setText("");
    //model.reset();
    }
     
    public void quit() {
    connectionAnimation.stop();
    }
     
    /**
    * Action pour l'exécution d'une recherche d'une vente.
    * 
    * @author Romain Guy
    */
    public class SearchAction implements ActionListener {
     
    public void actionPerformed(ActionEvent e) {
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    carder.show(cardPane, "animation");
    connectionAnimation.start();
    resetValues();
    searchButton.setEnabled(false);
    Thread performer = new Thread(new Runnable() {
    public void run() {
    search();
    }
    }, "Searcher");
    performer.start();
    }
    });
    }
     
    }
    }
    et voici le code de l'appel s'execute après que l'uitlisateur est saisi une valeur dans le champ et qu'il ai appuyer sur le bouton.
    Et l'affichage se fait avant avec la méthode buildPanel()

  6. #6
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Y a un truc qui m'étonne, tu es absolument sûr que c'est le pcfield qui fait ça ?

    Parce que avant le search() tu fais un resetValues() qui fait Pcfield.setText("")

    S'il était null ça pèterait avant.

    C'est à quel ligne exactement que ça lance l'exception ?

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 351
    Par défaut réponse
    J'ai suivi ton conseil en ajoutant des println dans chaque methode et voici le message renvoyé.Cela signifie bien que buildPanel() s'execute avant search()


    Execution de buildPanel()
    Execution de search()
    PC:
    IMPOT:
    java.lang.NullPointerException
    at Bd.component.ViewReglement.search(ViewReglement.java:218)
    at Bd.component.ViewReglement.access$700(ViewReglement.java:52)
    at Bd.component.ViewReglement$2.run(ViewReglement.java:400)
    at java.lang.Thread.run(Thread.java:534)
    Load data error: java.lang.NullPointerException

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

Discussions similaires

  1. Erreur lors de l'utilisation de TableSorter.java
    Par Frac10 dans le forum AWT/Swing
    Réponses: 47
    Dernier message: 20/11/2006, 12h06
  2. Erreur lors de l'utilisation de session_start();
    Par nane1474 dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2006, 12h06
  3. Erreur lors de l' utilisation des objets ADO
    Par aityahia dans le forum Bases de données
    Réponses: 10
    Dernier message: 24/03/2006, 13h46
  4. Eviter les erreurs lors de l'utilisation des compo Tsocket
    Par Coussati dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/02/2006, 19h14
  5. Erreur lors de l'utilisation de strlwr ?!
    Par MonsieurAk dans le forum C++
    Réponses: 4
    Dernier message: 05/12/2005, 10h22

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