2011-10-19 20 views
23

私はビデオアプリケーションを開発しています。 1回目のビデオ再生が終了したら、「OnCopletion」で新しいものを開始しようとしています。しかし、それはちょうど停止(クラッシュではない)し、何もしません。ログ内:java.lang.IllegalStateExceptionそれはどういう意味ですか?

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) 

これはどういう意味ですか?どうすれば修正できますか? 私のコードがあります:

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



    } 

お願いします。

答えて

0

Androidのドキュメントは言う呼び出すことができますについてIllegalStateException

VMが 正しい状態でないときにアクションを一度にしようとした場合にスローされます。

関連する問題