2

LWUIT を使用して j2me アプリケーションをコーディングしました。エミュレータだけでなくシンビアン デバイスでも問題なく動作します。しかし、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 を管理するコードを削除すると、フォームが表示されます。この混乱を修正するにはどうすればよいですか?

EDIT 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();
4

2 に答える 2

4

splash.show()をに変更splash.showModeless()

show()ダイアログがすぐに表示されると想定しているため、コードに関係なく、ほとんどの GUI フレームワークの動作とは異なります。ダイアログを表示するには、メソッドが完了して LWUIT に制御を返す必要があります。ただし、RMS を読んだ後、フォームを表示するコードが不明です。実際にいつ発生すると予想されますか。

タイムアウトなしでダイアログを表示する必要があります(スプラッシュ画面にフォームを使用しますが、ダイアログを使用する理由はありません)。次に、スレッド(new Thread(...))を開いて、必要なことを行います。スレッドが完了し、フォームが表示されます。

于 2011-09-22T08:27:44.920 に答える
1

このブログによると、 「何も表示しない」という問題は、呼び出しの遅延に対する 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();
           }
      }
    });
于 2011-09-21T06:36:26.103 に答える