2012-06-18 87 views
1

不工作:Dialog.Ask是給與詮釋indexoutofboundsExceptions []

final Object[] stringsMenu; 
Vector auxMenu = new Vector(); 
final IntVector optionsMenu = new IntVector(); 
     auxMenu.addElement("ficha"); 
     optionsMenu.addElement(1); 
     auxMenu.addElement("ficha2"); 
     optionsMenu.addElement2); 
     auxMenu.addElement("ficha3"); 
     optionsMenu.addElement(3); 
    UiApplication.getUiApplication().invokeLater(new Runnable() 
    { 
     public void run() 
     { 
     try 
     { 
      int[] optionsintMenu = optionsMenu.getArray(); 
        switch (Dialog.ask("Info:", stringsMenu, optionsintMenu, 0)) 
        { 
         ... 
        } 
       } 
      } 
     } .................. 

工作

final Object[] stringsMenu; 
Vector auxMenu = new Vector(); 
final IntVector optionsMenu = new IntVector(); 
     auxMenu.addElement("ficha"); 
     optionsMenu.addElement(1); 
     auxMenu.addElement("ficha2"); 
     optionsMenu.addElement2); 
     auxMenu.addElement("ficha3"); 
     optionsMenu.addElement(3); 
    UiApplication.getUiApplication().invokeLater(new Runnable() 
    { 
     public void run() 
     { 
     try 
     { 
        switch (Dialog.ask("Info:", stringsMenu, new int[]{1,2,3}, 0)) 
        { 
         ... 
        } 
       } 
      } 
     } ..................... 

是給我一個內部IndexOutOfBoundsException異常。有什麼想法發生了什麼?

+0

1.請格式化你的代碼,因此它實際上是可讀性有人說,沒有自虐傾向。 ;)2.我猜'IntVector'是'Vector '的某種實現?你有沒有試過看'optionsIntMenu'?我的猜測是,這個數組並不是真正的你想要的... – brimborium

+0

哦和3.不要做'Vector auxMenu = new Vector();',但是'Vector auxMenu = new Vector ();相反。 – brimborium

+1

黑莓使用Java-ME,所以沒有泛型,沒有ArrayList,沒有迭代器。 –

回答

1

而不是getArray()嘗試使用toArray()

根據該文檔:

指定者:

公共INT []指定者()

獲取底層存儲的副本。結果數組被修剪。

的getArray:

公共INT []的getArray()

檢索矢量值。該數組未被修剪並且不是副本。

陣列未修剪,這可能是爲什麼你會得到一個indexOutOfBound

+1

最奇怪的是,當我把他們的價值看好時沒有修剪,沒有額外的空間沒有空或不同的大小。但一定是這裏的Dialog使用了一個內部代表。的向量。好答案。 –

+0

是的,它可能與Vector的容量有關,根據addElement方法doc:「如果該向量的容量大於容量,它的容量就會增加。」和capacityIncrement字段:容量當其大小大於其容量時,矢量自動遞增。如果容量增量爲0,則每次需要增加時,矢量的容量就會增加一倍 –