java.lang.IllegalStateException这是什么意思? [英] java.lang.IllegalStateException what does it mean?

查看:799
本文介绍了java.lang.IllegalStateException这是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发视频应用。经过第一次的视频播放完成后,在OnCopletion我想开始一个新的。但它只是停止(不崩溃),什么也不做。在日志:

I'm developing a video application. After 1st video playback done, in the "OnCopletion" I'm trying to start a new one. But it just stops (not crashes) and do nothing. In the log:

10-19 09:44:49.056: ERROR/MediaPlayer(4654): setDataSource called in state 128
10-19 09:44:49.056: WARN/System.err(4654): java.lang.IllegalStateException
10-19 09:44:49.056: WARN/System.err(4654):     at android.media.MediaPlayer.setDataSource(Native Method)
10-19 09:44:49.056: WARN/System.err(4654):     at ru.osiris.BusAdvertising.BusAdvertisingActivity.onCompletion(BusAdvertisingActivity.java:1255)
10-19 09:44:49.056: WARN/System.err(4654):     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1304)
10-19 09:44:49.056: WARN/System.err(4654):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 09:44:49.056: WARN/System.err(4654):     at android.os.Looper.loop(Looper.java:123)
10-19 09:44:49.056: WARN/System.err(4654):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-19 09:44:49.056: WARN/System.err(4654):     at java.lang.reflect.Method.invokeNative(Native Method)
10-19 09:44:49.056: WARN/System.err(4654):     at java.lang.reflect.Method.invoke(Method.java:521)
10-19 09:44:49.056: WARN/System.err(4654):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-19 09:44:49.056: WARN/System.err(4654):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-19 09:44:49.056: WARN/System.err(4654):     at dalvik.system.NativeStart.main(Native Method)

这是什么意思?我该如何解决这个问题? 还有就是我的code:

what does it mean? How can I fix it? there is my code:

public class BusAdvertisingActivity extends Activity implements LocationListener, OnBufferingUpdateListener, OnCompletionListener,
OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback {
...
    private MediaPlayer mMediaPlayer;
    private SurfaceView mPreview;
    private SurfaceHolder holder;
    private String path;
    private Bundle extras;

     @Override
    public void onCreate(Bundle icicle) {
        mPreview = (SurfaceView) findViewById(R.id.surface);
        holder = mPreview.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        extras = getIntent().getExtras();
    }
 public void surfaceCreated(SurfaceHolder holder) {
        Log.d(TAG, "surfaceCreated called");
        playVideo();
}
private void playVideo(Integer Media) {
        Log.d(TAG, "playVideo called");
        doCleanUp();
        try {
           File clip=new File(Environment.getExternalStorageDirectory(),
                            playList[FLcurrentVideo].substring(2,            playList[FLcurrentVideo].length()-1)+".mp4");
           path = clip.getAbsolutePath();
           mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(path);
            mMediaPlayer.setDisplay(holder);
            mMediaPlayer.prepare();
            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setOnVideoSizeChangedListener(this);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);


        } catch (Exception e) {
            Log.e(TAG, "error: " + e.getMessage(), e);
        }
    }


public void onCompletion(MediaPlayer arg0) {

        Log.d(TAG, "onCompletion called");
        FLcurrentVideo++;

        File clip=new File(Environment.getExternalStorageDirectory(),
                playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4");
                path = clip.getAbsolutePath();

                    try {
                        Log.d ("111", path);
                        arg0.setDataSource(clip.getAbsolutePath());   //I got exception here
                        arg0.setDisplay(holder);
                        arg0.prepare();
                        arg0.setOnBufferingUpdateListener(this);
                        arg0.setOnCompletionListener(this);
                        arg0.setOnPreparedListener(this);
                        arg0.setOnVideoSizeChangedListener(this);
                        arg0.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }



    }

请帮我。

推荐答案

如果您看到此状态图:

If you see this state diagram :

您会认识到,你应该叫复位()找回来空闲状态。只有这样,你叫的setDataSource()

You will realize that you should call reset() to get it back to the idle state. Only then can you call setDataSource()

这篇关于java.lang.IllegalStateException这是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆