Ошибка ArrayOutOfBoundException

#java #java-me #lwuit #lwuit-resource-editor

#java #java-me #lwuit #lwuit-редактор ресурсов

Вопрос:

Я новичок в LWUIT, и хотя я нахожу его очень интересным в использовании, у меня возникла проблема предварительного просмотра всего, что MIDlet я создаю. Каждый раз, когда я запускаю MIDlet в эмуляторе, я получаю ArrayOutOfBOundException отображение в виде формы на экране эмулятора и завершу работу только после нажатия OK на форме.

Это мой код

     import javax.microedition.midlet.*;

    import com.sun.lwuit.*;
    import com.sun.lwuit.events.*;
    import com.sun.lwuit.Form;
    import com.sun.lwuit.plaf.UIManager;
    import com.sun.lwuit.util.Resources;
    import java.io.IOException;

    public class Ruwwa extends MIDlet implements ActionListener {
      public void startApp() {
       Display.init(this);

    Form f = new Form("");

    f.setTitle("Mairuwa Portal");

    Label bottomText = new Label();
    bottomText.setText("Welcome to the Mairuwa Portal");
    bottomText.setTextPosition(Component.CENTER);
    f.addComponent(bottomText);

    Command exitCommand = new Command("Exit");
    f.addCommand(exitCommand);
    f.addCommandListener(this);

    f.show();

    try {
      Resources r = Resources.open("/res/working.res");
       UIManager.getInstance().setThemeProps(r.getTheme("Mairuwa Theme"));
         } catch (IOException ioe) {
             // Do something here.
         }

    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}

    public void actionPerformed(ActionEvent ev) {
       Label label = new Label();
       label.setText("Initiating IO, please wait...");
       Display.getInstance().invokeAndBlock(new Runnable() {
    public void run() {
       // perform IO operation...
      }
    });
    label.setText("IO completed!");
     // update UI...
      }
    }
  

Он отобразил форму с этим кодом, но не отобразил ее в созданной мной теме.Название темы — «working.res», и я включил ее в папку res в папке проекта.Спасибо

Комментарии:

1. Покажите нам свой код, и мы, возможно, сможем помочь

Ответ №1:

Во время выполнения вашего кода я получаю illegalargumentexception эту строку, bottomText.setTextPosition(Component.CENTER); .

Потому что вы не можете установить позицию текста метки как Component.CENTER . Вы должны использовать позицию текста метки как LEFT/RIGHT/BOTTOM/TOP . Если вы измените положение текста метки, как я упоминал, это будет работать должным образом.

Итак, если вы получаете ArrayOutOfBOundException , вы допустили ошибку в каком-то другом месте. Попробуйте отладить ваше приложение и выяснить, где вы допустили ошибку.

Обновить:

 Display.init(this);
try {
      Resources r = Resources.open("/res/working.res");
       UIManager.getInstance().setThemeProps(r.getTheme("Mairuwa Theme"));
     } catch (IOException ioe) {
          // Do something here.
     }
   // your code.
  

Комментарии:

1. Я сделал то, что вы сказали мне, как упоминалось. Проблема, с которой я сталкиваюсь, заключается в том, что ЯРЛЫК действительно отображался, но он не отображался в теме. Тема вообще не появлялась. Я не могу поставить ярлык на тему и другие компоненты графического интерфейса. спасибо

2. Вы вызвали Resource после показа Form . Это неправильно. Попробуйте вызвать Resource приведенный ниже из Display.init(this); . Посмотрите на мое обновление.

3. Путь к теме, вероятно, также неверен. Если тема находится в корне jar, она должна быть / не /res.

4. @ Shai, если бы мы добавили res папку в библиотеки и свойства, это должно сработать. Верно?