Grabar posición al Cerrar

Mac Oso
20 de Mayo del 2002
Estoy en mi PRIMERA aplicación Java y me he quedado clavado en lo siguiente: cuando se cierra la aplicación, quiero guardar la posición de la ventana para poder recuperarla al llamarla de nuevo y mostrarla en el mismo sitio. Ya tengo un metodo para grabar, pero no puedo llamarlo al cerrar porque no es static. Lo que tengo es esto:

WindowListener escolta = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
gravaStream();
System.exit(0);
}
(...)

boolean gravaStream() {
X = (int)this.getLocation().getX();
Y = (int)this.getLocation().getY();
etc. etc.

Ya sé que es muy básico pero ¿alguien puede ayudarme????? que tengo que hacer.

Luismahou
20 de Mayo del 2002
Lo que tienes que hacer es crear una clase que herede de JFrame. Luego sobreescribes su método processWindowEvent(WindowEvent e). Algo así:

processWindowEvent(WindowEvent e) {
if (e.getID == WindowEvent.CLOSING) {
grabaStream();
}
super.processWindowEvent(e);
}

Haciendo esto detecta el evento antes de que se produzca y así lo puede procesar.

Luismahou

Mac Oso
20 de Mayo del 2002
Pero como el metodo de detección del evento windowClosig está dentro del main, el compilador se queja de que "non static method grabaStream cannot be referenced from a static context" :(
por qué no puedo llamar a métodos no estaticos desde main, es desesperante, de que me sirve un main completamente aislado del resto de metodos en la clase???

Luismahou
20 de Mayo del 2002
Las partes de código estáticas pueden ser muy útiles, pero hay que tener mucho cuidado al usarlas. Yo te recomendaría que dentro del main() no pusieras mucho código. Es mejor crear clases que se encargen de construir la aplicación, y dejar el main sólo para motivos de inicialización. Para evitar el error tienes que sacar el escuchador del main(). Yo te recomendaría que tuvieras una clase que heredara de JFrame y que al iniciarse se pusiera el escuchador, o un clase "Controlador" que controlará el flujo de la aplicación, y desde ella crear la ventana y añadirle el escuchador. Y desde el main() simplemente iniciar un objeto de esta clase.

Espero haberte ayudado,

Luismahou