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 :

appel d'une classe dans une fonction


Sujet :

Java

  1. #1
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut appel d'une classe dans une fonction
    Salut a tous,
    mon probleme est la suivante:
    J'ai une classe qui contient deux champs texte(JTextField) et une bouton ok
    lorsque je clique sur le bouton ok je doit retouner une chaine de caractére
    qui est composé de deux chaps textuels.(il marche bien avec les tests)
    Aussi j'ai un autre classe qui comporte une fonction qui doit à
    chaque fois appeler le classe ci-dessus et recupére le String retourné.
    La probleme est comment faire exactement dans la fonction pour s'assurer
    que je ne doit passser au 2éme instruction qui est la recupération du chaine qu'aprés le clic
    sur le bouton ok
    code :
    public class Classe2
    {
    fonction(String s)
    {
    Classe1 c1=new Classe1(s); //instruction1

    //il faut avoir un stop aussi et ne passer à l'instruction suivante qu'aprés le
    //clic sur le bouton Ok car la fonction recuperer n'a de sens qu'aprés le
    //clic sur OK

    String s_recupéré =c1.recuperer(s);//instruction2

    System.out.print(s_recupéré);//toujours il retourne null

    }
    }
    Toute information sera le bien venue et merci d'avance.

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Rien compris ...

    reformule, soit clair et utilises la balises code ... merci
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut explication du probleme
    Salut a tous,
    merci pour ton aide et voila une autre maniére pour expliquer mon probleme et j'espere quel soit bien presenté.
    J'ai deux classe classe1 et classe2
    La premiere classe est une classe qui etend du JFrame ,elle comporte deux champs textuelles et une bouton ok. Quand je clique sur le bouton "ok" une chaine static va reçoit le contenu de deux chaines .
    la classe deux (classe2)comporte une fonction qui doit à chaque fois appeler
    la classe et 1 et recupérer la valeur du chaine static .
    code classe 1:
    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
     
    /*
     * Tem.java
     *
     * Created on __DATE__, __TIME__
     */
     
    package convertisseur;
     
    /**
     *
     * @author  __USER__
     */
    public class Tem extends javax.swing.JFrame {
     
    	/** Creates new form Tem */
    	public Tem() {
    		initComponents();
    	}
     
    	/** This method is called from within the constructor to
             * initialize the form.
             * WARNING: Do NOT modify this code. The content of this method is
             * always regenerated by the Form Editor.
             */
    	//GEN-BEGIN:initComponents
    	// <editor-fold defaultstate="collapsed" desc="Generated Code">
    	private void initComponents() {
     
    		jButton1 = new javax.swing.JButton();
    		jTextField1 = new javax.swing.JTextField();
    		jTextField2 = new javax.swing.JTextField();
     
    		setDefaultCloseOperation(3);
     
    		jButton1.setText("OK");
    		jButton1.addActionListener(new java.awt.event.ActionListener() {
    			public void actionPerformed(java.awt.event.ActionEvent evt) {
    				jButton1ActionPerformed(evt);
    			}
    		});
     
    		jTextField1.setText("jTextField1");
     
    		jTextField2.setText("jTextField2");
     
    		org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(
    				getContentPane());
    		getContentPane().setLayout(layout);
    		layout
    				.setHorizontalGroup(layout
    						.createParallelGroup(
    								org.jdesktop.layout.GroupLayout.LEADING)
    						.add(
    								org.jdesktop.layout.GroupLayout.TRAILING,
    								layout.createSequentialGroup().addContainerGap(
    										285, Short.MAX_VALUE).add(jButton1)
    										.add(68, 68, 68))
    						.add(
    								layout
    										.createSequentialGroup()
    										.add(38, 38, 38)
    										.add(
    												layout
    														.createParallelGroup(
    																org.jdesktop.layout.GroupLayout.TRAILING,
    																false)
    														.add(
    																org.jdesktop.layout.GroupLayout.LEADING,
    																jTextField2)
    														.add(
    																org.jdesktop.layout.GroupLayout.LEADING,
    																jTextField1,
    																org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
    																167,
    																Short.MAX_VALUE))
    										.addContainerGap(195, Short.MAX_VALUE)));
    		layout
    				.setVerticalGroup(layout
    						.createParallelGroup(
    								org.jdesktop.layout.GroupLayout.LEADING)
    						.add(
    								org.jdesktop.layout.GroupLayout.TRAILING,
    								layout
    										.createSequentialGroup()
    										.add(70, 70, 70)
    										.add(
    												jTextField1,
    												org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
    												org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
    												org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    										.add(36, 36, 36)
    										.add(
    												jTextField2,
    												org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
    												org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
    												org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    										.addPreferredGap(
    												org.jdesktop.layout.LayoutStyle.RELATED,
    												88, Short.MAX_VALUE).add(
    												jButton1).add(45, 45, 45)));
     
    		pack();
    	}// </editor-fold>
    	//GEN-END:initComponents
     
    	private void  jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    		sb=new String(jTextField1.getText()+ jTextField2.getText());
    		System.out.print(retourner_chaine());
    	}
    public static String retourner_chaine()
    {
    	return sb;
    }
    	/**
             * @param args the command line arguments
             */
    	public static void main(String args[]) {
    		java.awt.EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				new Tem().setVisible(true);
    			}
    		});
    	}
     
    	//GEN-BEGIN:variables
    	// Variables declaration - do not modify
    	private javax.swing.JButton jButton1;
    	private javax.swing.JTextField jTextField1;
    	private javax.swing.JTextField jTextField2;
    	private static String sb=null;
    	// End of variables declaration//GEN-END:variables
     
    }
    classe2:
    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
     
    public class classe2
    {
    public fonction f()
    {
    i=0;
    while(i>10)
    {
    String f= new String();
    //mon probleme est comment appeler la classe 1 ici puis recuperer le string     
    //apres le clik sur "ok" du classe 1 et l'affecté au string f
     
    // c-a-d je veux avoir une instruction comme celle ci
     
    f=fonction();
    //avec f contient la valeur du chaine retourné par la classe1
    }
     
     
    }
     
     
     
    }
    Ils sont justes des petits classes pour bien expliquer la situation car mes classes sont trés grandes et aussi plus complexes,j'espére que la probleme est bien expliqué et merci

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    ben la "fonction" qui retourne la chaine c'est retourner_chaine() ... comme cette méthode (en fait en java on appelle ça des méthodes) est static, tu peux l'appeler directement ...

    donc dans classe2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String f=Tem.retourner_chaine();
    Par contre ya un truc qui cloche. Quand tu lances classe, rien ne dit que Tem aura été lancée avant. Donc la valeur retournée par retourner_chaine pourra être null.

    C'est ça que tu voulais dire dans ton premier message : comment faire pour être sûr que le bouton a été cliqué avant ?

    En fait il y a plein de solutions ...

    Par exemple (mais ce n'est surement pas la bonne solution) :

    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
    public class classe2
    {
    public fonction f()
    {
    i=0;
    while(i>10)
    {
     
    // n'oublie pas d'incrémenter i, sinon tu vas attendre longtemps ...
     
    String f= null;
     
    while(f == null({ // ici on attends qu'il y ait une valeur ...
                          // mais attention c'est juste un exemple
                          // il ne faut pas gérer ça comme ça
        f = Tem.retourner_chaine();
    }
     
    }
     
     
    }

    Ca dépend de ce que tu veux faire ... tu peux utiliser des booleans, des threads ... Le mieux est surement de construire une nouvelle classe qui contient le main et qui gère tout ça ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  5. #5
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par in Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String f=Tem.retourner_chaine();
    Par contre ya un truc qui cloche. Quand tu lances classe, rien ne dit que Tem aura été lancée avant. Donc la valeur retournée par retourner_chaine pourra être null.
    C'est ça que tu voulais dire dans ton premier message : comment faire pour être sûr que le bouton a été cliqué avant ?

    ...
    oui c'est ça et comment recuperer le string.
    Pour ton solution je le testé mais je tombé dans le piége de boucle infinie

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par fraisa1985 Voir le message
    oui c'est ça et comment recuperer le string.
    Ben qu'est ce qui ne marche pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String f=Tem.retourner_chaine();
    te renvoie bien la chaine normalement


    Citation Envoyé par fraisa1985 Voir le message
    Pour ton solution je le testé mais je tombé dans le piége de boucle infinie
    Ben ça c'est à toi de gérer. C'est quoi "i" ?
    T'as qu'à faire des i++ à chaque fois que tu lis une valeur ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  7. #7
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut Reformulation de probleme
    Merci pour votre attention et
    Voila un autre reformulation de probleme qui j'espere quel soi t plus compréhensible:
    Si on a 5 classe qui sont des interfaces graphique et chaque interface comporte une bouton "suivant" qui permet de basculer entre l'interface i et l'interface i+1(avec i <=4) .
    Or je suis obligé de faire l'appel de ce 5 classe dans une classe indépendantes qui contient le main et l'appel de ce classe exemple:
    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
     
    public class Main
    {
     
    public static void main(String[] args)
    {
    Interface_graphique1 interface1=new Interface_graphique1();//appel du l'interface graphique n°1
    String s=interface1.retourner_resultat();// or la methode retourner_resultat() //n'a de sens qu'aprés l'exécution de cette classe 
    Interface_graphique2 interface2=new Interface_graphique2();
    String s2=interface2.retourner_resultat();// or la methode retourner_resultat() //n'a de sens qu'aprés l'exécution de cette classe 
    Interface_graphique3 interface3=new Interface_graphique3();
    String s3=interface3.retourner_resultat();// or la methode retourner_resultat() //n'a de sens qu'aprés l'exécution de cette classe 
     
    Interface_graphique4 interface4=new Interface_graphique4();
    String s4=interface4.retourner_resultat();// or la methode retourner_resultat() //n'a de sens qu'aprés l'exécution de cette classe 
    fonction(s,s2,s3,s4);
     
    //la  probleme est comment faire une stop entre l'appelation de chaque classe 
    // et ne passer à l'appelation du classe2(c-a-d interface_graphique2) qu'aprés
    // le click sur le bouton "suivant" de l'interface graphique 1.
    }
     
    }
    Encore merci pour votre aide et pour votre patient

  8. #8
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    tu devrais regarder du côté des threads je pense. Ce que je vais dire n'est pas forcément la meilleure des solutions ...

    A mon avis tu devrais tout repenser depuis le début. Ca va être ingérable ton truc ...

    Tu lances chacune de tes interfaces dans un thread. A chaque fois avant de poursuivre ton traitement tu atttends que le thread soit terminé. Tu peux aussi utiliser l'interface Future qui te permet de récupérer une valeur depuis un thread

    Tu peux par exemple regarder du côté des ThreadPoolExecutor. en gros ça te permet de créer une file d'attente de thread. Et pour chaque thread tu attends qu'il te renvoie une valeur grâce à FutureTask.

    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
    // il faut que tes classes interface_graphique
    // implements Callable<String>
     
    FutureTask<String> toolTask = null; // en gros c'est le résultat attendu de tes threads
    ThreadPoolExecutor toolProcess = null; // la file d'attente
     
    //...
    // ici un exemple avec un seul thread dans la file
    toolTask = new FutureTask<String>(interface1);
    toolProcess = new PausableThreadPoolExecutor(1,1,3600L,TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
    	try {
    		toolProcess.submit (toolTask); // ajoute le thread dans la file et l'execute ...
                    toolProcess.shutdown(); // tout est ajouté, on attend la fin de la file (on ne peut plus ajouter)
    		String result= = toolTask.get(); // récupère lke résultat
            ....
    Je me répète mais franchement, pose toi 10 min avec papier crayon et revoie ton idée, tu dois pouvoir faire beaucoup, beaucoup, plus simple ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/04/2015, 15h44
  2. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  3. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  4. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  5. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2005, 19h36

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