Java exception AWT-EventQueue-0" java.lang

harizon007 Messages postés 21 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,




bonjour j'ai développer une class JDialog
et quand je l'éxécute, jai l'érreur suivante qui affiche:

default close operation is set to EXIT_ON_CLOSE. ... Exception in thread "AWT-EventQueue-0" java.lang. ... must be one of: DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE ...
voila la classe un peut simplifier, la méthode main est dans une autre class, donc je fais l'instanciation de cette class pour la lancer.
Merci pour votre réponse.


public class Permis extends JDialog{

private JButton okButton,cancelButton;
private JPanel contenuCentre;


public Permis(JFrame parent){
super(parent,"Ajout d'un nouveau permis",true);

initComposants();
initPanels();
run();

//fenetre principal
setSize(420,380);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
// setResizable(false);
setLocationRelativeTo(null);


}

public void initComposants(){

//Button
okButton= new JButton ("OK");
okButton.setPreferredSize(new Dimension(80,22));
cancelButton = new JButton("cancel");
cancelButton.setPreferredSize(new Dimension(80,22));

//Label
Label1 =new JLabel("Numero license");
Label1.setPreferredSize(dimLabel);


}
public void initPanels(){

Container c=getContentPane();
c.setLayout(new BorderLayout());

contenuCentre = new JPanel();
Border brd=BorderFactory.createEtchedBorder(EtchedBorder.LOWERED) ;
FlowLayout flt=new FlowLayout();
flt.setAlignment(FlowLayout.LEFT) ;
contenuCentre.setLayout(flt);
contenuCentre.setBorder(brd);


JPanel row1=new JPanel(new FlowLayout());
row1.add(Label1);
row1.add(txtLno);
-----------

contenuCentre.add(row1);

//panel du sud
/* panelSud =new JPanel();
panelSud.setLayout(new GridLayout(1,2,5,5));
------------
c.add(contenuCentre,BorderLayout.CENTER);
// c.add(panelSud, BorderLayout.SOUTH);


}

public void run(){

}
}
A voir également:

2 réponses

choubaka Messages postés 39984 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
Bonjour

Le message d'erreur est clair

default close operation is set to EXIT_ON_CLOSE. ... Exception in thread "AWT-EventQueue-0" java.lang. ... must be one of: DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE ...

ça te rapporte à ceci

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

tu as une ligne de trop, tu ne peux en utiliser qu'une des deux.
1
KX Messages postés 19031 Statut Modérateur 3 020
 
Il serait bon que tu nous donnes le bon code !
Celui que tu nous as donné est incomplet, erroné et ne correspond pas au problème !
Pour qu'on puisses t'aider il faut qu'on puisse faire copier-coller, exécuter, et tomber sur l'erreur. Là avec ton code il faut rajouter les fields, les imports, déboguer, construire un main, et finalement quand je teste, je tombe sur une autre erreur que la tienne !

Mais bon pour analyser ton problème, ce n'est pas le fait que tu utilises deux setDefaultCloseOperation à la suite qui pose problème, mais plutôt que tu utilises les constantes de JFrame dans un composant JDialog... Pour un JDialog, EXIT_ON_CLOSE n'est pas valide, comme l'indique ton message tu peux mettre DISPOSE_ON_CLOSE à la place.
Remarque : "par chance" les constantes JFrame.x_ON_CLOSE, et JDialog.x_ON_CLOSE ont la même valeur (en fait c'est parce que les constantes sont définis dans WindowConstants), mais il n'est pas toujours nécessaire que deux constantes de même nom aient la même valeur alors qu'elles appartiennent à deux classes différentes ! Elles auraient très bien pu être définies indépendamment par JFrame et JDialog avec des valeurs différentes (exemple JFrame.EXIT_ON_CLOSE aurait pu avoir la même valeur que JDialog.DISPOSE_ON_CLOSE) Ici il n'y a donc aucune raison d'utiliser les constantes de JFrame, il faut que tu utilises les constantes de JDialog. Dans ce cas puisque tu hérites, tu peux directement mettre le nom de la constante sans mettre le JDialog. devant :

//setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); // un seul suffira
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
0