Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.IllegalStateException what does it mean?

Tags:

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) 

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

Please, help me.

like image 319
SentineL Avatar asked Oct 19 '11 04:10

SentineL


People also ask

Is IllegalStateException a checked exception?

An IllegalStateException is an unchecked exception in Java. This exception may arise in our java program mostly if we are dealing with the collection framework of java. util.

What causes a Java Lang error?

This is Thrown if an application tries to access or modify a specified field of an object, and that object no longer has that field. This is Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.

How do I handle IllegalStateException on Android?

Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. You should look into one of your thread and make it synchronized with your UI thread. The way to do this in Android is with Handler.


1 Answers

If you see this state diagram (taken from https://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram): enter image description here

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

like image 140
Reno Avatar answered Oct 12 '22 23:10

Reno