Parece que tengo el problema inverso para la mayoría de las personas. Tengo el siguiente código bastante estándar para ver si el usuario quiere hacer algunas paradas antes de cerrar la ventana:Java: cómo evito que WindowClosing cierre realmente la ventana
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
boolean close = true;
// check some files, asking if the user wants to save
// YES and NO handle OK, but if the user hits Cancel on any file,
// I want to abort the close process
// So if any of them hit Cancel, I set "close" to false
if (close) {
frame.dispose();
System.exit(0);
}
}
});
No importa lo que intento, la ventana siempre se cierra cuando salgo de windowClosing. Cambiar WindowAdapter a WindowListener no hace ninguna diferencia. Lo que es extraño es que la documentación dice explícitamente "Si el programa no oculta o descarta explícitamente la ventana mientras se procesa este evento, la operación de cierre de la ventana se cancelará", pero no funciona de esa manera para mí. ¿Hay alguna otra forma de manejar la x en el marco? TIA
Apuesto a que hay un error en algún lugar que será obvio para ti si simplificas tu problema tanto como sea posible creando un [sscce] (http://sscce.org). Si no se vuelve obvio, puede publicar el documento y podemos trabajar en él y poder ayudarlo mejor. –
Según el código provisto, su lógica para establecer la variable 'close' probablemente sea incorrecta. Como su valor predeterminado es verdadero, parece que no lo restablece correctamente. ¿Imprimiste el valor antes de la declaración if? – camickr
Acabo de encontrarme con otra situación que puede causar estos síntomas si utilizo Netbeans (8.0).El código generado automáticamente por Design View agregará su propia operación de cierre predeterminada, que puede anular el comportamiento especificado en el código generado por el ser humano. Esto se puede editar en el cuadro de propiedades de JDialog. (dejando este comentario para las generaciones futuras que buscan soluciones a problemas similares, a pesar de no ser la respuesta a la pregunta de Paul). –