Salut !
Jai deux fenêtres, chacune contient un bouton+actionperformed, jexécute la première fenêtre puis je clique sur le bouton pour lancer la deuxième fenêtre, le code des deux boutons est comme suit :
Fenêtre1 :
Int i=0 ;
Bouton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Fenetre2 fen2=Fenetre2();
Fen2.setVisible(true);
Fen2.pack();
i++;
}
});
Fenêtre2 :
Bouton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println( I =+i);
}
});
Si je clique sur le bouton de la fenetre2 il affiche la valeur de i incrémenté à chaque fois mais malheureusement il affiche toujours i=0 ;
Comment faire le lien entre les deux fenêtres pour lincrémentation à chaque clique sur le bouton de la fenêtre.
Merci davance.
évite de taper tes codes sources dans Word
pour ton problème, la solution est simple: il a copié i en tant que membre privé de ton action listener (un truc dans le genre je subbodore), et donc dans l’autre cas, il n’accède jamais à une valeur modifiée.
Pour résoudre ton problème, tu peux faire un objet en bon et due forme, et t’en servir:
final Machin x = new Machin(); // + i
Bouton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Fenetre2 fen2=Fenetre2(x); // requiert un constructeur ad hoc
Fen2.setVisible(true);
Fen2.pack();
x.i++;
}
});
Bouton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println( I =+x.i);
}
});
merci pour ta répense
mais si dans le bouton de la premiére fenétre j’execute une commade DOS :
try{
Runtime.getRuntime().exec("java Fenetre2");
}
catch(java.io.IOException e1) {
e1.printStackTrace();
}
dans ce cas comment garder i (fene1 fen=new fene1(x)) ?
merci encore une fois.
T’as plusieurs façon: par fichiers, par tubes (communication inter processus), par mémoire partagée (je pense que c’est possible, mais peut-être pas entre thread), par sockets (serveur/client), …
Mais honnêtement, t’as plus vite fait d’ouvrir ta frame directement, ça te permettra de conserver le classpath, et en conséquence d’éviter les erreurs © avis perso
merci sans-Nom pour ton aide , j’ai résolu le problème :
pour le bouton de la fenêtre 1 on met:
try{
Runtime.getRuntime().exec("java fene1 "+i);
//dispose();
}
catch(java.io.IOException e1) {
e1.printStackTrace();
}
i++;
et pour la deuxiéme fenetre on met :
public static void main(String args[]){
int i = Integer.parseInt(args[0]);
fene1 fen=new fene1(i);
fen.setVisible(true);
fen.pack();
}
merci encore une fois
Tu as ce choix là, mais tu vas relancer Java + la fenêtre à chaque fois que tu veux afficher ton i, ce qui n’est -entre nous - pas très malin.
- java = lourd, et au passage c’est javaw qu’il faut utiliser sinon tu risque d’afficher la console (fort heureusement pas depuis exec()
- tu peux faire exactement pareil sans créer de nouveau processus
A voir