2011-10-13 84 views
0

我想讓我的J2ME項目必須使用MMAPI(JSR135)取承受力的能力 所以,檢查我的HTC Diamond採用下面的代碼可以使用J2ME

import javax.microedition.lcdui.Command; 
import javax.microedition.lcdui.CommandListener; 
import javax.microedition.lcdui.Display; 
import javax.microedition.lcdui.Displayable; 
import javax.microedition.lcdui.Form; 
import javax.microedition.midlet.MIDlet; 

public class jsrtest extends MIDlet implements Runnable,CommandListener{ 
    Form form; 
    Thread thread; 
    Command c=new Command("Exit",Command.EXIT,0); 
    public jsrtest() 
    { 
     Display.getDisplay(this).setCurrent(form=new Form("JSR Test")); 
     form.addCommand(c); 
     form.setCommandListener(this); 
     (thread=new Thread(this)).start(); 
    } 
    protected void destroyApp(boolean u){ 
     super.notifyDestroyed(); 
    } 
    protected void pauseApp() { 
    } 
    protected void startApp(){ 
    } 
    public void run() { 
     checkJSR("MIDP2.0","javax.microedition.lcdui.game.GameCanvas"); 
     checkJSR("CLDC1.1","java.lang.Float"); 
     checkJSR("MMAPI","javax.microedition.media.Player"); 
     checkJSR("WMAPI","javax.wireless.messaging.Message"); 
     checkJSR("JSR75","javax.microedition.io.file.FileConnection"); 
     checkJSR("JSR082","javax.bluetooth.UUID"); 
     checkJSR("JSR135","javax.microedition.media.Control"); 
     checkJSR("JSR135_videocontrol","javax.microedition.media.control.VideoControl"); 
     checkJSR("JSR179","javax.microedition.location.Location"); 
     checkJSR("JSR180","javax.microedition.sip.SipConnection"); 
     checkJSR("JSR184","javax.microedition.m3g.Mesh"); 
     checkJSR("JSR211","javax.microedition.content.Registry"); 
     checkJSR("JSR226","javax.microedition.m2g.SVGImage"); 
     checkJSR("JSR229","javax.microedition.payment.TransactionRecord"); 
     checkJSR("JSR234","javax.microedition.amms.Module"); 
     checkJSR("JSR238","javax.microedition.global.Formatter"); 
     checkJSR("JSR239","javax.microedition.khronos.egl.EGL"); 
    } 
    private void checkJSR(String jsr,String className) 
    { 
     try { 
      Class.forName(className); 
      form.append(jsr+" Supproted\n"); 
     } catch (ClassNotFoundException e) { 
      form.append(jsr+" Not Supproted\n"); 
     } 
    } 
    public void commandAction(Command cmd, Displayable disp) { 
     this.destroyApp(false); 
    } 
} 

這表明MMAPI是HTC鑽石支持MMAPI HTC Diamond支持。

所以我測試我的HTC鑽石下面的代碼來看看相機的作品,但失敗:

private void test(){ 
    Player p; 
    VideoControl vc; 
    try{ 
     p = Manager.createPlayer("capture://video"); 
     p.realize(); 
     vc = (VideoControl) p.getControl("VideoControl"); 
     form.append(new StringItem("mmmmmmmm","")); 
     if (vc != null) { 
     form.append((Item)vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null)); 
     } 
     p.start(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

} 

在上面的代碼在Java ME平臺工作正常SDK 3. 誰能告訴我,爲什麼沒有按MMAPI」 t用我的手機嗎?

+0

你能發佈異常消息和它被引發的行嗎?也知道在哪個線程中執行該方法會有所幫助。 –

+0

@MisterSmith:在我的手機上,沒有顯示任何異常消息。似乎'catch'語句永遠不會運行。 – tunpishuang

回答

1

可以進行額外的測試,看看是否支持視頻拍攝:

if(System.getProperty("supports.video.capture") == null){ 
    //Video capture not supported 
} 

但我認爲主要的問題是在這條線:

form.append((Item)vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null)); 

試試這個:

vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, <a Canvas here>); 
    vc.setDisplayFullScreen(true); 
    vc.setVisible(true); 
+0

我在HTC Diamond和另一款諾基亞8600luna上測試了相同的代碼。在諾基亞800luna它工作正常。但HTC Diamond不起作用。我們說HTC Diamond不支持MMAPI。或者這是Windows Mobile的Jvm問題(我正在使用Jbed)。 – tunpishuang

+0

getProperty返回什麼?而且,如果支持,HTC的行爲是什麼?黑屏?例外? –

+0

黑屏,也不例外。現在我嘗試在windows mobile platform上編碼.j2me被放棄了.... – tunpishuang