3

次のコードを書きました。カメラプレーヤーの作成に使用されます。私はノキアの電話でそれをテストしました。正常に動作しており、カメラを見てその機能を使用できます。

しかし、問題は、コードがサムスンの携帯電話でテストされると、Media 例外がスローされ、最終的にアプリケーションを終了する必要があることです。このコードが原因で、組み込みのカメラ機能 (つまり、サムスンの携帯電話) も動作しなくなります。では、その理由は何ですか?

    public void startCamera()
{
    try
    {
        try 
        {
            // if player==null
            player = createPlayer();
        } 
        catch (Exception ex) 
        {
            ex.printStackTrace();
            ErrorDialog.show(ex, "We are exiting the application.",
                        "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                    public void actionPerformed() {
                        m_objMIDlet.exitApp();
                    }
            });
        }
        try 
        {
            player.realize(); 
            player.prefetch();
        }
        catch (MediaException ex) 
        {
            ex.printStackTrace();
            ErrorDialog.show(ex, "We are exiting the application.",
                        "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                    public void actionPerformed() {
                        m_objMIDlet.exitApp();
                    }
            });
        }




        //Grab the video control and set it to the current display.
        videoControl = (VideoControl)(player.getControl("VideoControl"));
        if (videoControl == null)
        {
            //discardPlayer();
            stopCamera();
            ErrorDialog.show("Unsupported:\n"+
                 "Can't get video control\n"+
                 "We are exiting the application.",
                    "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                public void actionPerformed() {
                    m_objMIDlet.exitApp();
                }
            });
        }

        mediaComponent = new MediaComponent(player);
        mediaComponent.setFocusable(false);
        m_cameraScreen.showCamera(mediaComponent);
        start();
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
        //discardPlayer();
        stopCamera();
        ErrorDialog.show("Sorry,Resources unavailable.\nWe are exiting the application.",
                        "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                    public void actionPerformed() {
                        m_objMIDlet.exitApp();
                    }
        });
    }

}

    private Player createPlayer()throws MediaException, Exception 
{
    Player mPlayer = null;
    // try capture://image first for series 40 phones
    try 
    {
        mPlayer = Manager.createPlayer("capture://image");
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    catch (Error e) 
    {
        e.printStackTrace();
    }

    // if capture://image failed, try capture://video
    if (mPlayer == null) 
    {
        try 
        {
            mPlayer = Manager.createPlayer("capture://video");
        } 
        catch (Exception e)
        {
            e.printStackTrace();
            throw new MediaException("Sorry,Resources unavailable.");
        }
    }

    if(mPlayer == null)
        throw new Exception("Sorry,Resources unavailable.");

    return mPlayer;

}

4

1 に答える 1

1

まず最初にprintStackTrace()、Symbian 電話を使用していない限り、エミュレータの外ではほとんど役に立たないことを認識する必要があります。

java.lang.Throwableを分離する代わりにException使用することもできますError

Stringテスト中に情報を として収集し、それを単純な lcdui に追加することで、何が起こるかを正確に把握できFormます。


try {
    // do something that could potentially fail
} catch (Throwable th) {
    myDebugLcduiForm.append("potential failure number xx." + th + th.getMessage());
    // if necessary, throw a new RuntimeException
}

コードのどの行がどの例外をスローするかを正確に把握したら、質問を更新/再投稿することをお勧めします。

于 2012-05-11T13:00:44.110 に答える