Me topé con un inconveniente al usar Netbeans Mobility Pack. La causa es el código que genera cuando creamos una lista en el editor visual de pantallas.
Cuando agregamos elementos a un ChoiceGroup se genera el siguiente código
public ChoiceGroup getCgToAccount() {
if (cgToAccount == null) {
// write pre-init user code here
cgToAccount = new ChoiceGroup("To Account", Choice.POPUP);
cgToAccount.append("Choice Element 1", null);
cgToAccount.append("Choice Element 2", null);
cgToAccount.setFitPolicy(Choice.TEXT_WRAP_DEFAULT);
cgToAccount.setSelectedFlags(new boolean[] { false, false });
cgToAccount.setFont(0, null);
cgToAccount.setFont(1, null);
// write post-init user code here
}
return cgToAccount;
}
Si más tarde debemos modificar la lista de valores con el método
append(value, null)
, la aplicación falla mostrando :
java.lang.ArrayIndexOutOfBoundsException
at javax.microedition.lcdui.ChoiceGroup.insertImpl(ChoiceGroup.java:1377)
at javax.microedition.lcdui.ChoiceGroup.append(+25)
Esto aparentemente sería un bug de Java, el cual al llamar a .setFont de alguna forma "congela" el tamaño de la lista y no pueden agregarse nuevos elementos sin recibir el error. Hay un tema en el foro de SDN que explica este bug en detalle: CLDC and MIDP - Problem in changing List control's font.
Por suerte el problema no se presenta si no existe una llamada a .setFont así es que para el caso de NetBeans la solución es borrar todos los elementos del ChoiceGroup y agregarlos por código. Esto por supuesto en el caso de que necesitemos modificarlos durante la ejecución.
No hay comentarios:
Publicar un comentario