Que pasa con el Listener

gabox
09 de Enero del 2006

Hola, no se porque no puedo modificar el valor de un parametro que recibo de otra clase, en un MouseListener.

He aqui parte de codigo:

aceptar.addMouseListener (
new MouseAdapter() {
public void mouseClicked (MouseEvent e){
Cliente cliente;
sNom = nombre.getText( );
sDom = domicilio.getText();
sRfc = rfc.getText();
sTel = tel.getText();
cliente = new Cliente(sNom,sDom,sRfc,sTel);
salida.setText(cliente.getNombre());

eleccion = String.valueOf ( combo.getSelectedItem() );
salida1.setText(String.valueOf ( combo.getSelectedItem() ) );

int p = damePosicion(misVehiculos, eleccion);

//En esta clase recibo aVehiculos, peor no puedo usarlo en el listener
aVehiculos[p].setEstado(2);

JOptionPane.showMessageDialog
(null, "La renta se realizo con exito" ,"Nueva Renta",
JOptionPane.INFORMATION_MESSAGE);
setVisible(false);
}
}
);

El error:

C:ClasesProyecto>javac Renta.java
Renta.java:131: local variable aVehiculos is accessed from within inner class; n
eeds to be declared final
aVehiculos[p].setEstado(2);
^
1 error

C:ClasesProyecto>


Alguna idea???
No puedo continuar con mi tarea :`(

Gracias!!!

chuidiang
09 de Enero del 2006
Hola:
El problema es que el código del listener se ejecutará más adelante, cuando ocurra el evento del ratón.
Es posible en ese momento que la variable que te pasan como parámetro ya no exista, puesto que no se está ejecutando el código de ese método, sino solo el del listener.
Para que esa variable siga existiendo más adelante, cuando se ejecute el codigo del listener, tienes varias opciones.
Puedes declararla final, como te indica el error.
Puedes guardar el valor en algún atributo de la clase y luego el listener usar ese atributo
Puedes pasar el valor de la variable al MouseAdapter a través de algún método que le pongas para eso.

Se bueno