Foros del Web » Programación para mayores de 30 ;) » Java »

no me deja modificar valor TextField

Estas en el tema de no me deja modificar valor TextField en el foro de Java en Foros del Web. Hola a todos, tengo una serie de TextField distribuidos por mi programa. Para inicialiar los valores la primera vez, hago una funcion X, que me ...
  #1 (permalink)  
Antiguo 30/10/2014, 19:49
 
Fecha de Ingreso: octubre-2008
Mensajes: 184
Antigüedad: 16 años, 1 mes
Puntos: 1
no me deja modificar valor TextField

Hola a todos,
tengo una serie de TextField distribuidos por mi programa.
Para inicialiar los valores la primera vez, hago una funcion X, que me crea un array tipo TextField, y le añado los valores actuales de las cajas de texto (que están vacias". Comparo si los valores son iguales a la cadena de texto " " para comprobar si está vació, si lo está mete el valor que le paso por la función (esto es ya que deben estar en un orden concreto).

Pues bien, después de esto estoy intentando modificar los valores de las caja de texto, pero por alguna razón siempre me el mismo error.

La función para modicarlo es practicamente la misma

ArrayList<JTextField> a = new ArrayList <JTextField>();

a.add(a1);
a.add(a2);
a.add(a3);
a.add(a4);
a.add(a5);

a.get(0).setText("0");

aX son de tipo TextField.

Tengo aislado el error la función de edición de valores.He ido probando con diversas funciones (la idea era pasarle la posición donde debe modificar el valor, pero he llegado a esta expresión mas simplificada para poder comprobar que el acceso es correcto, pero siempre me da error. La llamada principal la hago en una clase, que llama a otra función de una clase diferente.

Aquí dejo el error:

java.lang.NullPointerException
at Factores.Atomizar(Factores.java:356)
at Factores.Dividir(Factores.java:253)
at Fisica.actionPerformed(Fisica.java:226)
at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


¡Gracias a todos por vuestro tiempo!
  #2 (permalink)  
Antiguo 31/10/2014, 00:37
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: no me deja modificar valor TextField

Buenas,

El error es claro. En la línea 356 de tu clase Factores.Atomizar estás intentando acceder a un objeto que es null.

Si revisas dicha línea darás con el error.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 31/10/2014, 00:46
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: no me deja modificar valor TextField

Hola,

Cita:
Iniciado por Olbapk Ver Mensaje
... Para inicialiar los valores la primera vez, hago una funcion X, que me crea un array tipo TextField, y le añado los valores actuales de las cajas de texto (que están vacias". Comparo si los valores son iguales a la cadena de texto " " para comprobar si está vació, si lo está mete el valor que le paso por la función (esto es ya que deben estar en un orden concreto).
....
La excepción es NullPointerException, es decir al llamar al método get del ArrayList te devuelve un valor null. Posiblemente cuando metiste los JTextField no estaban incializados todavía, por lo tanto el ArrayList (que permite valores null) en ese bucket número 0 contiene un valor null.

Asegurate que antes de meter el JTextField esté instanciado.

Código:
JTextField a1 = new JTextField();
a.add(a1);
Saludos,
  #4 (permalink)  
Antiguo 31/10/2014, 08:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 184
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: no me deja modificar valor TextField

¡Buenas!,
gracias a ambos por contestar y de manera tan clara :).

Pero precisamente ahí está mi duda, al definir el array creo la estructura, y cuando llamo hago add.(a1) a1 está definida ya como variable privada en esa clase como TextField, instanciada y con un valor, por lo que imaginaba que ya no haría falta instanciarlo de nuevo. De hecho, como indicaba, usaba ese código para meter los valores en dichas caja de texto (a1, a2 etc) la primera vez, y me coge los valores perfectamente. Es ahora al intentar modificarlo, cuando tengo el problema.

Aún así, he modificado la función de la siguiente manera siguiendo vuestros consejos, donde t es el valor (en String) que le meto para que actualice el TextField :

public void actualizarTextoParticula(String t)
{
ArrayList<JTextField> a = new ArrayList <JTextField>();


JTextField a1= new JTextField();
JTextField a2= new JTextField();
JTextField a3= new JTextField();
JTextField a4= new JTextField();
JTextField a5= new JTextField();

a.add(a1);
a.add(a2);
a.add(a3);
a.add(a4);
a.add(a5);



for (int i=0;i<a.size();i++)
{
a.get(i).setText(t);
}

Aunque el error sigue apareciendo.

¡Gracias!
  #5 (permalink)  
Antiguo 31/10/2014, 09:11
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: no me deja modificar valor TextField

Cita:
Aunque el error sigue apareciendo.
En que linea exactamente se produce el error? Es tambien un NullPointerException?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 31/10/2014, 10:30
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: no me deja modificar valor TextField

Hola,

Cita:
Iniciado por Olbapk Ver Mensaje
... está definida ya como variable privada en esa clase como TextField, instanciada y con un valor, por lo que imaginaba que ya no haría falta instanciarlo de nuevo. ...
Si el ArrayList no es null, los JTextField antes de meterlos al ArrayList no eran null, no hay forma de que en el código que mostraste tire un NullPointerException.

Por lo menos en ese código que mostraste ahora y en el inicial, el único motivo por el cual se podría producir un Null Pointer es al obtener el valor del ArrayList.

Por ejemplo:

Código Java:
Ver original
  1. import javax.swing.JTextField;
  2. import java.util.ArrayList;
  3.  
  4. public class NullTest {
  5.  
  6. public static void main(String[] args) {
  7. ArrayList<JTextField> a = new ArrayList <JTextField>();
  8.  
  9.  
  10. a.add(a1);
  11. a.add(a2);
  12. a.add(a3);
  13. a.add(a4);
  14. a.add(a5);
  15.  
  16. for (int i=0;i<a.size();i++)
  17. {
  18. a.get(i).setText(null);
  19. }
  20.  
  21. for (int i=0;i<a.size();i++)
  22. {
  23. System.out.println(a.get(i).getText().getClass());
  24. }
  25.  
  26. }
  27. }

Aunque yo le ponga Null explicitamente al JTextField nunca me va a devolver un Null, el JTextField siempre tiene un valor. Mientras el ArrayList esté instanciado y le haya metido los JTextField instanciados. Posiblemente el error es en otro lugar, en alguna parte del código que no has mostrado.

Cita:
Iniciado por Profesor_Falken Ver Mensaje
En que linea exactamente se produce el error? Es tambien un NullPointerException?
Exactamente eso mismo es lo que tengo yo la duda todavía. Me imaginé que era en el get().

Saludos,

Última edición por HackmanC; 31/10/2014 a las 10:43 Razón: Cambiar el System.out para mostrar que no es null
  #7 (permalink)  
Antiguo 31/10/2014, 10:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 184
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: no me deja modificar valor TextField

Hola a ambos de nuevo.
gracias por seguir mi caso e intentar ayudarme.

El error es el mismo tipo de error, java.lang.NullPointerException, en las mismas lineas, si comento la función dada, el programa se ejecuta sin problemas, es al ejecutar la función es cuando se cuelga.

He probado lo que dices HackmanC, y aún así sigue sigue ocurriendo lo mismo, (mismo error mismas líneas).

Esta es la función que utilizo para meterle los valores por primera vez a las cajas de texto, tras esta función no se tocan mas esos valores.

public void anadirTextoUnidadA(String texto)
{
//variables
int i;
ArrayList<JTextField> arrayAt = new ArrayList <JTextField>();
String vacio ="";

arrayAt.add(a1);
arrayAt.add(a2);
arrayAt.add(a3);
arrayAt.add(a4);
arrayAt.add(a5);

//inicio
for (i=0;i<arrayAt.size();i++)
{
//System.out.println(arrayAt.get(i).getText());
if(vacio.equals(arrayAt.get(i).getText())) /
{
arrayAt.get(i).setText(texto);
break;
}
}

}

Etiquetas: clase, modificar, programa, textfield, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:20.