Problemas con variables

bladerunner
16 de Junio del 2005
Saludos compañeros, al acceder a una variable de una clase me da el siguiente error (al acceder a la variable dt_modelo, en la clase Datos_automata_aleatorio): "local variable dt_modelo is accessed from within inner class; needs to be declared final" y no se por que me sale este error, si lo hago igual que en otra clase, y no me da erro, y es practicamente el mismo codigo.
He echo lo que me han aconsejado de declararla como final, xo tampoco me funciona, y ademas no quiero que sea constante, ya que se la quiero pasar a otro metodo, y que dicha variable se modifique en el otro metodo, por lo tanto no me vale que sea final.

Por favor, ayudarme que estoy muy atascao con esto ultimo. Gracias.

public class Menu extends JPanel
{
DefaultTableModel dtm;
...
// defino los actionListener de un menu
actionListener al_generar=new ActionListener()
{
public void actionPerformed (actionEvent e)
{
new Datos_automata_aleatorio(dtm);
}
}
}

y el codigo de la clase Datos_automata_aleatorio es:

class Datos_automata_aleatorio extends JPanel
{
// creación de distintos paneles
public void
escribir_en_fichero_y_generar_aleatorio
(DefaultTableModel dtm_aleat)
{
new Generar_aleatorio(dimension, long_max, car_alfabeto, num_cad_pos, num_cad_neg, dtm_aleat);

}
}


Datos_automata_aleatorio(DefaultTableModel dt_modelo)
{
crear.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
escribir_en_fichero_y_generar_aleatorio(dt_modelo);
// en la linea anterior es donde me da el error
}
} ); // fin del action listener

p.add (...); // añadir en el panel principal todos los demas

JFrame m=new JFrame();
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m.getContentPane().add(p);
m.setSize(300,450);
m.setTitle("Automata aleatorio");
m.setVisible(true);

}
}

Echarme un clavo urgente que estoy aqui anclado porfaaaaaaa.
Gracias.

chuidiang
16 de Junio del 2005
Hola:

Efectivamente, si qieres usarla debes declararla final, no queda más remedio.
Aunque sea final, puedes pasarla y modificarla en otro método. Lo que no puedes es cambiarle el valor en el trozo de código donde la declaras. Ten en cuenta que en cuanto la pases a otro método, el método va a ver otra variable, la que declaras en el parámetro (aunque el contenido sea el mismo).

Si aun asi no te vale, otra opción es hacer una copia en una variable auxiliar final y que sea esta la que utilce la clase interna.

Se bueno.

chuidiang
16 de Junio del 2005
Hola de nuevo:

Más opciones. También puedes hacer que la variable sea un atributo de la clase principal. De esta forma puedes acceder a ella sin necesidad de declararla final.

Se bueno.