J2ME no PalmOS - IndexOutOfBoundsException

Estou fazendo uns testes com J2ME no Palm e segui um tutorial disponível no site da SUN para J2ME. Só que daí resolvi inventar moda e coloquei muitos elementos numa tela só. Fiz isso pq uso PocketStudio para desenvolver e lá não consigo incluir elementos na tela em tempo de execução.

Peguei o exemplo do tutorial e fiz um for até 200 para incluir texto na tela, só que daí dá pau: IndexOutOfBoundsException (q consultei pelo output do Java HQ). Se tentar incluir 120 elementos, dá certo, mas 150 dá o erro. Na verdade o Palm trava, mas depois de reiniciado, dá para ver o log.

O interessante que nos emuladores de celulares dá certo, mas no emulador do Palm e no próprio Palm dá pau…

Alguém sabe se existe alguma limitação para a quantidade de elementos incluidos???

Abaixo, segue o código q eu usei para testar: o q eu incluí está no método testForm().

[code]import javax.microedition.lcdui.;
import javax.microedition.midlet.
;

public class GuiTests extends MIDlet
implements CommandListener {
// display manager
Display display = null;

// a menu with items
List menu = null; // main menu

// list of choices
List choose = null;

// textbox
TextBox input = null;

// ticker
Ticker ticker = new Ticker("Test GUI Components");

// alerts
final Alert soundAlert = 
new Alert("sound Alert");

// date
DateField date = new DateField("Today's date: ", DateField.DATE);

// form
Form form = new Form("Form for Stuff");
 
// gauge
Gauge gauge = new Gauge("Progress Bar", false, 20, 9);

// text field
TextField textfield = new TextField("TextField Label", "abc", 50, 0);

// command
static final Command backCommand = new Command("Back", Command.BACK, 0);
static final Command mainMenuCommand = new Command("Main", Command.SCREEN, 1);
static final Command exitCommand = new Command("Exit", Command.STOP, 2);
String currentMenu = null;

// constructor.
public GuiTests() {
}

/**
 * Start the MIDlet by creating a list of
 items and associating the
 * exit command with it.
 */
public void startApp() throws 
MIDletStateChangeException {
  display = Display.getDisplay(this);
  // open a db stock file

  menu = new List(
  "Test Components", Choice.IMPLICIT);
  menu.append("Test TextBox", null);
  menu.append("Test List", null);
  menu.append("Test Alert", null);
  menu.append("Test Date", null);
  menu.append("Test Form", null);
  menu.addCommand(exitCommand);
  menu.setCommandListener(this);
  menu.setTicker(ticker);

  mainMenu();
}

public void pauseApp() {
  display = null;
  choose = null;
  menu = null;
  ticker = null;
  form = null;
  input = null;
  gauge = null;
  textfield = null;      
}

public void destroyApp(boolean unconditional) {
  notifyDestroyed();
}

// main menu
void mainMenu() {
  display.setCurrent(menu);
  currentMenu = "Main";
}

/**
 * Test the TextBox component.
 */
public void testTextBox() {
  input = new TextBox
  ("Enter Some Text:", "", 10, TextField.ANY);
  input.setTicker(new Ticker(
  "Testing TextBox"));
  input.addCommand(backCommand);
  input.setCommandListener(this);
  input.setString("");
  display.setCurrent(input);
  currentMenu = "input";
}

/**
 * Test the List component.
 */
public void testList() {
    choose = new List("Choose Items",
    Choice.MULTIPLE);
    choose.setTicker(new Ticker(
    "Testing List"));
    choose.addCommand(backCommand);
    choose.setCommandListener(this);
    choose.append("Item 1", null);
    choose.append("Item 2", null);
    choose.append("Item 3", null);
    display.setCurrent(choose);
    currentMenu = "list"; 

}

/**
* Test the Alert component.
/
public void testAlert() {
soundAlert.setType(AlertType.ERROR);
//soundAlert.setTimeout(20);
soundAlert.setString("
* ERROR **");
display.setCurrent(soundAlert);
}

/**
* Test the DateField component.
*/
public void testDate() {
java.util.Date now = new java.util.Date();
date.setDate(now);
Form f = new Form(“Today’s date”);
f.append(date);
f.addCommand(backCommand);
f.setCommandListener(this);
display.setCurrent(f);
currentMenu = “date”;
}

/**
* Test the Form component.
*/
public void testForm() {
form.append(gauge);
form.append(textfield);
for (int i = 0; i < 150; i++) {
form.append(new StringItem(null, i+"\n"));
}
form.addCommand(backCommand);
form.setCommandListener(this);
display.setCurrent(form);
currentMenu = "form";
}

/**
* Handle events.
*/
public void commandAction(Command c,
Displayable d) {
String label = c.getLabel();
if (label.equals("Exit")) {
destroyApp(true);
} else if (label.equals("Back")) {
if(currentMenu.equals("list")
|| currentMenu.equals("input") ||
currentMenu.equals("date")
|| currentMenu.equals("form")) {
// go back to menu
mainMenu();
}

  &#125; else &#123;
     List down = &#40;List&#41;display.getCurrent&#40;&#41;;
     switch&#40;down.getSelectedIndex&#40;&#41;&#41; &#123;
       case 0&#58; testTextBox&#40;&#41;;break;
       case 1&#58; testList&#40;&#41;;break;
       case 2&#58; testAlert&#40;&#41;;break;
       case 3&#58; testDate&#40;&#41;;break;
       case 4&#58; testForm&#40;&#41;;break;
     &#125;
        
  &#125;

}
}

[/code]
valeu!

[color=“red”]
Editado para conter BBCode Code por JuJo[/color]

Faz o seguinte. Pega o JAR/JAD e converte para PRC, mas usando o conversor da KVM da IBM (J9 WebSphere). Ela é mais robusta do que a da Sun…suporta MIDP 2.0 e CLDC1.1…

Pega ela em http://pluggedin.palmone.com/java, é preciso se cadastrar no site, mas vale a pena…e é rapido…

Tira a KVM da Sun e coloca a da IBM no seu palm…Testa e depois bota aki no forum o resultado. Também estou desenvolvendo e preciso saber desses erros…Valew.

[quote=“ABorges”]Faz o seguinte. Pega o JAR/JAD e converte para PRC, mas usando o conversor da KVM da IBM (J9 WebSphere). Ela é mais robusta do que a da Sun…suporta MIDP 2.0 e CLDC1.1…

Pega ela em http://pluggedin.palmone.com/java, é preciso se cadastrar no site, mas vale a pena…e é rapido…

Tira a KVM da Sun e coloca a da IBM no seu palm…Testa e depois bota aki no forum o resultado. Também estou desenvolvendo e preciso saber desses erros…Valew.[/quote]

cara… eu fiz isso. porem a maquina virtual num roda no Palm OS Smulador 5.2. E tabem na achei nada pra converter o JAR/JAD em PRC. pode me dar uma dica?