Ничего не отображается на Nokia S40

Я написал приложение 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();

person Farhan    schedule 21.09.2011    source источник
comment
вы можете сказать мне размер файла jar приложения?   -  person bharath    schedule 21.09.2011
comment
после обфускации около 193 КБ   -  person Farhan    schedule 21.09.2011


Ответы (2)


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

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

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

person Shai Almog    schedule 22.09.2011
comment
форма регистрации не отображается после того, как диалог отклонен. вместо этого отображается белый экран. Кстати, в чем разница между show () и showModeless ()? - person Farhan; 22.09.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();
           }
      }
    });
person bharath    schedule 21.09.2011
comment
попробуйте сначала показать заставку, после чего вы сможете прочитать значение RMS. - person bharath; 21.09.2011
comment
Некоторые случаи. Итак, вам нужно обрабатывать RMS. Как долго вы показываете заставку? - person bharath; 21.09.2011
comment
Вы пробовали считывать среднеквадратичное значение перед отображением заставки? - person bharath; 21.09.2011