Question

I coded a j2me application using LWUIT. It works fine on emulator as well as a symbian device. But when i tried to run it on a nokia s40 device,it showed up a "nothing to display" message. I tried displaying a splash screen, as prescribed in some forums. Still,the app never gets past the splash screen.

EDIT 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
        }

In this snippet,a blank screen is displayed on the device after the dialog/splash screen. The form gets displayed when i remove the codes managing the RecordStore. How do i fix this mess ?

EDIT 2 Code for registration()

        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();
Was it helpful?

Solution

Change the splash.show() to splash.showModeless()

Regardless your code is incorrect since it assumes show() will display the dialog immediately which is not how most GUI frameworks work. Your method needs to complete and return control to LWUIT in order for the dialog to show. However, you read the RMS and then the code to show your form is unclear, when do you expect it to actually occur.

You need to show the dialog without a timeout (I would use a form for the splash screen there is no reason to use a dialog), then open a thread (new Thread(...)) to do whatever you want and then when the thread completes show your form.

OTHER TIPS

From this blog, The Nothing to display issue is standard Nokia S40 behavior for delayed calls to setCurrent() and the normal recommendation is to show a splash screen early on to avoid this prompt.

Also look this same related discussion.

Edit:

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();
           }
      }
    });
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top