«Ничего не отображать» на Nokia S40 - PullRequest
2 голосов
/ 21 сентября 2011

Я кодировал приложение j2me, используя LWUIT.Он отлично работает как на эмуляторе, так и на устройстве symbian.Но когда я попытался запустить его на устройстве Nokia S40, он обнаружил сообщение «ничего не отображать».Я попытался отобразить заставку, как предписано на некоторых форумах.Тем не менее, приложение никогда не проходит заставку.

РЕДАКТИРОВАТЬ 1

        Display.init(this);
        Resources r = Resources.open("/theme.res");
        UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));

        Dialog splash = new Dialog("Splash Screen");
        splash.setAutoDispose(true);
        splash.setTimeout(5000);
        splash.show();

        RecordStore rs = null;
        byte[] buffer = null;
        rs = RecordStore.openRecordStore("xxxxxx", true);
        if (rs.getNumRecords() > 0) {
            buffer = rs.getRecord(rs.getNumRecords());
            num = new String(buffer, 0, buffer.length);
            rs.closeRecordStore();
    offer(num);   // a method which displays main form
        } else {
            rs.closeRecordStore();
            registration("xxxxx"); //another method which displays the secondary form
        }

В этом фрагменте на экране устройства отображается пустой экран после диалогового окна /заставка.Форма отображается при удалении кодов, управляющих RecordStore.Как мне исправить этот беспорядок?

РЕДАКТИРОВАТЬ 2 Код для регистрации ()

        Form f = new Form();
        f.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        Image img = Image.createImage("logo.png");
        f.addComponent(new Label(img));
        Label lbl = new Label(msg);
        f.addComponent(lbl);
        f.addComponent(new Label("xxxxx"));
        final TextArea number = new TextArea(1, 10, TextArea.NUMERIC);
        f.addComponent(number);
        Button btn = new Button("Register");
        btn.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent evt) {
                //perform rms related activities and move onto offer()
            }
        });
        f.addComponent(btn);
        Button help = new Button("Help?");
        help.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent evt) {
                //display a help dialog
            }
        });
        f.addComponent(help);
        f.addCommandListener(this);
        f.show();

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Измените splash.show() на splash.showModeless()

Независимо от того, что ваш код неверен, так как предполагается, что show() немедленно отобразит диалоговое окно, что не так, как работает большинство структур GUI.Ваш метод должен завершить и вернуть управление в LWUIT для отображения диалогового окна.Тем не менее, вы читаете RMS, а затем код для отображения вашей формы неясен, когда вы ожидаете, что это произойдет на самом деле.на экране нет причин использовать диалоговое окно), затем откройте поток (новый поток (...)), чтобы сделать все, что вы хотите, а затем, когда поток завершится, покажите вашу форму.

1 голос
/ 21 сентября 2011

Из этого блога Проблема Ничего не отображается - это стандартное поведение Nokia S40 для отложенных вызовов до setCurrent(), и обычно рекомендуется показывать заставку на раннем этапе, чтобы избежать это подсказка.

Также посмотрите это то же самое обсуждение.

Изменить:

Form splashscreen = new Form();
splashscreen.getStyle().setBgImage(imageName);
splashscreen.show()
Display.getInstance().callSerially(new Runnable() {
    public void run() {
      try {
           Thread.sleep(5000L);
           // do RMS related things here.

     } catch (InterruptedException ex) {
           ex.printStackTrace();
           }
      }
    });
...