Executer une méthode d'une autre class

ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008 - 18 juin 2008 à 09:36
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 - 19 juin 2008 à 09:58
Bonjour

Je programme en JAVA sous "netbeans" sur un projet.

Je voudrais savoir comment, à partir d'une première class, exécuter une méthode qui appartient à une seconde class. Je m'explique :

J'ai ma première class pricipale ("public class Menu extends JMenuBar") dans laquelle il y a une class interne ("public class GestionExporter implements ActionListener") qui gère l'action d'un sous-item et qui possède à son tour une méthode ("public void actionPerformed(ActionEvent ev)") qui doit exécuter quelquechose quand on clique dessus.
Dans cette méthode ("public void actionPerformed(ActionEvent ev)"), je voudrais exécuter la méthode ("public void actionPerformedOne(ActionEvent ev)") qui appartient à la seconde class principale ("public class Page3 extends JPanel implements Printable").

Donc au final je voudrais savoir ce que je doit écrire dans la méthode ("public void actionPerformed(ActionEvent ev)") pour pouvoir éxecuter le programme qui se trouve dans la méthode ("public void actionPerformedOne(ActionEvent ev)") d'une autre class.

Merci d'avance

9 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 juin 2008 à 10:33
Salut,

Tu rajoutes un attribut :
private Page3 page3;
au début de ta classe Menu.

Tu renseignes cet attribut à l'instanciation d'un Menu, en gros tu complètes ton constructeur :
public Menu(...., Page3 page3, .....){
    ......
    this.page3 = page3;
    ......
}

Et ensuite dans la méthode actionPerformed de ta classe GestionExporter, tu peux écrire :
page3.actionPerformedOne(ev);

La classe qui instancie ton Menu, celle qui fait actuellement :
Menu menu = new Menu(......);

devra changer son appel au constructeur, puisque tu auras changé le constructeur, tu vas devoir remplacer par :
Menu menu = new Menu(..., page3, ...);

Ensuite si tu la classe / méthode qui instancie menu n'a pas accès à page3, tu essaies de voir comment tu peux faire, sachant que les liens entre des classes en Java se font, la plupart du temps, au moyen d'attributs (variables globales au début, normalement, de ta classe).
0
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
18 juin 2008 à 14:52
re bonjour jojolemariole

Voilà j'ai essayer d'intégrer ce que tu m'avais proposé mais lorsque j'essaye de compiler le projet, le débugger m'envoie ce message d'erreur que je n'arrive pas à comprendre :
"Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException"

Peux tu m'aider à régler ce problème?

merci d'avance
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 juin 2008 à 15:05
Salut,

La compilation d'un projet ne génère pas de NullPointerException, c'est une erreur qui arrive à l'exécution. Si tu veux qu'on t'aide il va falloir nous montrer ton message d'erreur au complet ainsi que les morceaux de code concernés.
0
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
18 juin 2008 à 15:36
voici le message d'erreur complet:

Le bouton 'Exporter' a été cliquer
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at BNG.Application.Menu$GestionExporter.actionPerformed(Menu.java:343)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1216)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1257)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


la class Menu ou je demande l'execution de la méthode "public void actionPerformedOne(ActionEvent ev)" :

(Parties de programme modifiées)

/**Déclaration de la classe Menu**/
public class Menu extends JMenuBar {



/**Déclaration des méthodes utilisées pour créer une barre de menu**/
protected JMenu fichier = new JMenu("Fichier");
/**
* Icon
*/

////

protected JMenuItem internet = new JMenuItem(" Internet");

protected JMenuItem quitter = new JMenuItem(" Quitter");

protected JMenuItem rafraichissement = new JMenuItem(" Rafraichir la ref PC");

protected JMenuItem exporter = new JMenuItem(" Exporter");

protected JMenuItem imprimer = new JMenuItem(" Imprimer");


/**
* Menu d'aide
*/
protected JMenu aide = new JMenu("?");

/**
* A propos
*/
protected JMenuItem ap = new JMenuItem("A propos de ...");

/**Déclaration de classe extèrieures pour permettre leur appel**/
protected Impression impression = new Impression();
// protected Rechercher rechercher1 ;


public Acceuil retouracceuil;

public Printable Page3;

private Page3 page3;


/**
* Méthode constructeur de Menu*
* @param acceuil_ Acceuil
*/
public Menu(Acceuil acceuil_, Page3 page3) {
/**Initialisation de la classe "Rechercher"**/
retouracceuil = acceuil_;
this.Page3 = page3;

.
.
.
.
.
fichier.add(exporter); /**Application graphique du sous-item 'imprimer'de l'item 'Fichier'**/
exporter.addActionListener(new GestionExporter()); /**De même pour le sous-item 'imprimer'**/
fichier.addSeparator();
.
.
.
/**
* Class de gestion de l'exportation des données
*/
public class GestionExporter implements ActionListener /**Evènement du bouton 'Exporter'**/
{
/**
* Methode d'exportation
* @param ev ActionEvent
*/
public void actionPerformed(ActionEvent ev)
{
Variable.out.println("Le bouton 'Exporter' a été cliquer");
page3.actionPerformedOne(ev);
}
}

}

la class Page3 où se trouve cette méthode :

public class Page3 extends JPanel implements Printable{

protected Acceuil retouracceuil;
.
.
.


public void actionPerformedOne(ActionEvent ev) {
//Variable.out.println("Le bouton 'Exporter' a été cliquer");
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
WritableWorkbook workbook = Workbook.createWorkbook(new File("sortie.xls"));
WritableSheet sheet = workbook.createSheet("Premier classeur", 0);

int nbRow = table.getRowCount();
int nbCol = table.getColumnCount();

for(int i=0;i<nbCol-2;i++){
sheet.addCell(new Label(i,0,(String)table.getModel().getColumnName(table.convertColumnIndexToModel(i))));
sheet.setColumnView(i,17);
}

Hashtable<Color,Colour> couleur = new Hashtable<Color,Colour>();
couleur.put(Color.RED,Colour.RED);
couleur.put(Color.GREEN,Colour.GREEN);
couleur.put(Color.BLUE,Colour.BLUE);
couleur.put(Color.CYAN,Colour.CORAL);
couleur.put(Color.WHITE,Colour.WHITE);
couleur.put(Color.GRAY,Colour.GRAY_50);
couleur.put(Color.LIGHT_GRAY,Colour.GRAY_25);
couleur.put(Color.MAGENTA,Colour.ROSE);
couleur.put(Color.ORANGE,Colour.ORANGE);


//for(int i=0;i<table.getModel().getRowCount();i++){
for(int i=0;i<nbRow;i++){
for(int j=0;j<nbCol-2;j++){
int ireal=table.convertRowIndexToModel(i);
int jreal=table.convertColumnIndexToModel(j);

if(!table.getValueAt(i,j).getClass().getName().equals("java.lang.String")){
Component c = table.getCellRenderer(ireal,j).getTableCellRendererComponent(table,table.getValueAt(i,j),false,false,i,j);
WritableFont w = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD, true, UnderlineStyle.NO_UNDERLINE,Colour.WHITE, ScriptStyle.NORMAL_SCRIPT);
WritableCellFormat wc = new WritableCellFormat(w);
wc.setBackground(couleur.get(c.getBackground()));
sheet.addCell(new Label(j,i+1,"",wc));
}else{
sheet.addCell(new Label(j,i+1,(String)table.getValueAt(i,j)));
}
}
}

workbook.write();
workbook.close();
setCursor(null);

Runtime run= Runtime.getRuntime();
String cmd = "cmd /C start excel "" + new File("sortie.xls").getAbsoluteFile()+""";
Runtime.getRuntime().exec(cmd);

} catch (RowsExceededException e1) {
e1.printStackTrace();
} catch (WriteException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
Variable.out.println("Le fichier "sortie.xls" à été généré correctement.");
}
}

.
.
.


}

la class où j'instancie mon menu :

public class Acceuil extends JFrame {

Acceuil acceuil = this;

/**Déclaration de classe extèrieures pour permettre leur appel**/
public Menu menu = new Menu(this.acceuil, this.page3);

public Page3 page3;
.
.
.
.

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 juin 2008 à 15:46
D'après ce que je vois, tu as fait une petite erreur ;

this.Page3 = page3;

alors que tu aurais du écrire

this.page3 = page3;

Java est case-sensitive, sensible à la casse (majuscule/minuscule).
0
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
18 juin 2008 à 15:53
Merci

J'ai corrigé l'erreur mais ce ne change rien. Quand j'exécute mon application et que je clique sur le sous-item "exportet" j'ai les mêmes messages d'erreurs dans ma console.
Tu ne vois pas autre chose qui cloche concernant l'appel de la méthode extérieur?
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 juin 2008 à 16:53
C'est-à-dire? toujours la NullPointerException?

Essaie de voir sur quelle ligne a lieu l'erreur :

Variable.out.println("Le bouton 'Exporter' a été cliquer");     OU BIEN
page3.actionPerformedOne(ev);

si c'est sur la première ligne, peux-tu détailler ce qu'est Variable?
si c'est la deuxième ligne, vérifie que dans le construteur, page3 ne vaut pas null. si il ne vaut pas null, vérifie que tu ne le changes pas entre le construteur et l'action exporter.
0
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
19 juin 2008 à 08:10
l'erreur a lieu après avoir afficher le message "Le bouton 'Exporter' a été cliquer".
Le problème c'est que je n'ai jamais déclaré page3 comme null mais page n'est jamais initialisé à une valeur quelconque. Donc si ca vient de là, comment je pourrait initialiser cette variable page3.
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juin 2008 à 09:58
Salut,
Désolé je peux pas t'aider si tu n'y mets pas un peu du tien.
Relie mon précédent post et essaie de répondre.
0
Rejoignez-nous