J2ME no PalmOS - IndexOutOfBoundsException

2 respostas
N

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().

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();
          } 

      } else {
         List down = (List)display.getCurrent();
         switch(down.getSelectedIndex()) {
           case 0: testTextBox();break;
           case 1: testList();break;
           case 2: testAlert();break;
           case 3: testDate();break;
           case 4: testForm();break;
         }
            
      }
  }
}
valeu!

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

2 Respostas

A

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.

C

“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.

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?

Criado 6 de abril de 2004
Ultima resposta 27 de out. de 2004
Respostas 2
Participantes 3