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

avec Java Discussion :

Appel méthode static/no static


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Par défaut Appel méthode static/no static
    Bonjour,

    je reviens vers vous pour avoir une tite aide/réponse concernant l'appel d'une méthode d'une classe vers une autre classe. (Static/No Static)

    les bout de code qui me sert pour faire mes tests.

    Le code dans ma Classe B (sql.java)

    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
    public String totalannuelTVA(){
            Fenetre Fen = new Fenetre(); // le constructeur sans arg
           // appel du composant Jdate pour obtenir la date 
            String year = Fen.Jdate.getDateFormatString(); // composant  qui se trouve sur la classe A
            requete = "select sum(MontantTva) from recu where Date <= '"+year+"-12-31' and Date >= '"+year+"-01-01' "; 
     
            System.out.println("le montant de la requête : " + requete);
            try {
                Connection con = SourceDonneesSqlite.getConnection();    /// connexion sur base SQLITE  
                Statement stmt = con.createStatement(); // A changer pour mettre un preparedStatement 
                ResultSet rs = stmt.executeQuery(requete);
                    while (rs.next()) {
                    Fen.tvaAnnuel.setText(rs.getString(1));  composant  qui se trouve sur la classe A
                    }
                rs.close(); // ferme la connexion
            } catch (Exception e) {
                System.out.println("Erreur:Anomalie lors de l'execution de la requête : " + e);
            }
     
        }
    l'appel dans ma classe A (Fenetre.java)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public Fenetre() {
    initComponents();
    this.setBounds(0x0, 0x0; 622, 481) // pour placer le fenêtre au centre et avec les bonnes dimensions 
    this.setBackground(Color.WHITE)
     
    sql Sql = new sql(); // le constructeur sans argument
    sql.totalannuelTVA();
    }
    Donc dans une autre classe j'aimerai appeler cette méthode pour afficher le résultat dans mon composant TextField (tvaAnnuel)

    Mais j'ai pas encore bien assimilé la problématique de l'appel des méthodes Static/non static car, c'est bien ici mon souci !

    En gros il me reste à comprendre se principe. Si vous avez un exemple quelque part ? MERCI

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Et bien tu peux rajouter le mot clé static devant "String totalannuelTVA()" et ainsi pouvoir l'appeler sans avoir à construire d'instance de classe.

    En gros une méthode peut être static si elle n'utilise aucune variable locale de classe.

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    sauf que ça va planter: totalAnnuel appelle le constructeur de Fenêtre qui appelle totalAnnuel.... Il y a un défaut d'architecture

  4. #4
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Bonjour,

    Mettre des composants de la vue au milieu d'une fonction qui fait une requête sql me suprend un peu.

    Pour ma part je ferais totalannuelTVA() qui retourne la valeur, puis j'afficherai cette valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public Fenetre() {
    initComponents();
    this.setBounds(0x0, 0x0; 622, 481) // pour placer le fenêtre au centre et avec les bonnes dimensions 
    this.setBackground(Color.WHITE)
     
    sql Sql = new sql(); // le constructeur sans argument
    String val = sql.totalannuelTVA();
    tvaAnnuel.setText(val );  
     
    }
    Ainsi tu peux faire ce que tu veux avec val sans te préocuper de la classe sql . C'est juste une classe qui effectue des fonctions de requête et qui retourne un résultat, elle ne s'occupe pas de la vue ainsi tu pourras dans un autre projet réutilisé ces fonctions sans dépendre du nommage d'un composant par exemple. Je soutiens professeur shadoko dans l'idée du soucis d'architecture.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  5. #5
    Membre confirmé Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Par défaut
    Citation Envoyé par XxArchangexX Voir le message
    Bonjour,

    Mettre des composants de la vue au milieu d'une fonction qui fait une requête sql me suprend un peu.

    Pour ma part je ferais totalannuelTVA() qui retourne la valeur, puis j'afficherai cette valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public Fenetre() {
    initComponents();
    this.setBounds(0x0, 0x0; 622, 481) // pour placer le fenêtre au centre et avec les bonnes dimensions 
    this.setBackground(Color.WHITE)
     
    sql Sql = new sql(); // le constructeur sans argument
    String val = sql.totalannuelTVA();
    tvaAnnuel.setText(val );  
     
    }
    Ainsi tu peux faire ce que tu veux avec val sans te préocuper de la classe sql . C'est juste une classe qui effectue des fonctions de requête et qui retourne un résultat, elle ne s'occupe pas de la vue ainsi tu pourras dans un autre projet réutilisé ces fonctions sans dépendre du nommage d'un composant par exemple. Je soutiens professeur shadoko dans l'idée du soucis d'architecture.
    Oui c'est bien mon attention. Ne plus me soucier de la classe sql.java. Mais je n'ai pas encore pu m'en sortir.

    Ci-joint 2 captures pour voir mes erreurs...

    Classe A


    classe B
    Images attachées Images attachées   

  6. #6
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Ne passe pas ta string résultat à ta méthode, je ne sais pas comment tu choisis l'année mais voila une fonction plus simple d'utilisation :

    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
     
    // annee au format AAAA
    public String totalannuelTVA(String annee){
            String resultat = "";
            requete = "select sum(MontantTva) from recu where Date <= '"+annee+"-12-31' and Date >= '"+annee+"-01-01' "; 
     
            try {
                Connection con = SourceDonneesSqlite.getConnection();    /// connexion sur base SQLITE  
                Statement stmt = con.createStatement(); // A changer pour mettre un preparedStatement 
                ResultSet rs = stmt.executeQuery(requete);
                    resultat = rs.getString(1))
                    }
                rs.close(); // ferme la connexion
            } catch (Exception e) {
                System.out.println("Erreur:Anomalie lors de l'execution de la requête : " + e);
            }
     
            return resultat ;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void appelSqlTvaAnnu(){
    sql Sql = new sql(); // le constructeur sans argument
    String val = sql.totalannuelTVA("2012");
    tvaAnnuel.setText(val );  
    }
    Par contre pour afficher tes erreurs il faut la phrase d'erreur qui va avec .

    Pour ne plus t'en soucier, dans ta classe sql quand tu fais une fonction pour obtenir une info de ta base tu l'écris comme si tu n'avais pas besoin d'info de l'appli, juste une requête sql normal et au moment ou tu vois que tu as besoin d'une info de ton application tu places cette valeur en paramètre de la fonction.

    Ainsi le soucis de la variable à obtenir ne sera pas dans la classe sql mais dans la classe ou tu appel la fonction pour faire en sorte qu'elle ai toutes les variables qui vont bien, cette couche supérieur qui est normalement un controleur ou ta vue, la où l'utilisateur effectue ses choix ou paramètrage. Pour conclure la classe SQL est une boite à outils.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  7. #7
    Membre confirmé Avatar de stefan73
    Homme Profil pro
    Formateur : OpenOffice.org/LibreOffice
    Inscrit en
    Mai 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formateur : OpenOffice.org/LibreOffice
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 105
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    sauf que ça va planter: totalAnnuel appelle le constructeur de Fenêtre qui appelle totalAnnuel.... Il y a un défaut d'architecture
    Effectivement mon souci est bien là ...

    Car j'avais bien essayé de mettre "Static" et message d'erreur "non-static method .... cannnot be referenced from a static context "

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Voit ce qui est juste au dessus, ton totalAnnuel n'a pas a appelé Fenetre.

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

Discussions similaires

  1. Appel méthode static
    Par stoner dans le forum Débuter
    Réponses: 5
    Dernier message: 13/12/2013, 23h40
  2. [1.x] [DOCTRINE] Problème appel méthode static
    Par Tyra3l dans le forum Symfony
    Réponses: 5
    Dernier message: 04/05/2011, 08h12
  3. [C#] Appel d'une fonction static impossible ?
    Par TheParadoX dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/08/2006, 10h23
  4. Débutante - Pb appel méthode static
    Par nmetais dans le forum Langage
    Réponses: 2
    Dernier message: 23/09/2005, 17h23
  5. [paint] Méthode déclaré en static
    Par Bugmaster dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 23/08/2004, 15h51

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