2011-09-21 91 views
2

我使用LWUIT編寫了一個j2me應用程序。它可以在模擬器以及Symbian設備上正常工作。但是當我試圖在諾基亞s40設備上運行它時,它顯示出「無法顯示」消息。我試圖按照某些論壇的規定顯示啓動畫面。儘管如此,該應用程序永遠不會超過啓動畫面。諾基亞S40上的「Nothing to display」

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 
     } 

在該片段中,顯示對話框/初始屏幕之後所述設備上的空白屏幕。 當我刪除管理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(); 
+0

你測試了什麼手機? – bharath

+0

諾基亞C3測試 – Farhan

+0

你能告訴我應用程序的jar文件大小嗎? – bharath

回答

4

更改splash.show()splash.showModeless()

不管你的代碼不正確,因爲它假設show()會立即它顯示的對話框也不怎麼大多數GUI框架都可以工作。您的方法需要完成並將控制權返回給LWUIT才能顯示對話框。但是,您閱讀了RMS,然後顯示您的表單的代碼不清楚,您什麼時候纔會真正發生。你需要在沒有超時的情況下顯示對話框(我會使用一個表單作爲啓動畫面,沒有理由使用對話框),然後打開一個線程(新線程(...))來做任何你想做的事情然後當線程完成時顯示你的表單。

+0

它在對話框被丟棄後不顯示註冊表單。而是顯示一個白色屏幕。 在旁邊note,show()和showModeless()之間有什麼區別? – Farhan

+0

我更新了答案 –

+0

謝謝。有效 :) – Farhan

1

this blog,沒有顯示問題是延遲調用setCurrent()和正常建議標準的諾基亞S40行爲是顯示一個啓動畫面儘早避免這種提示。

也期待這個same related discussion.

編輯:

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(); 
      } 
     } 
    }); 
+0

我試過這些方法。它不會通過啓動畫面。還是我做錯了方向?初始化啓動屏幕後,應用程序從RMS中讀取一些值,之後使用LWUIT表單處理信息。 – Farhan

+0

嘗試顯示初始屏幕後,您可以讀取RMS值。 – bharath

+0

即時通訊也是這樣做的! – Farhan