Please do not mind if I write this answer. I know this is a very old question, but this answer may help others. I am currently developing a JavaFX application that should execute a file depending on its type. My application played the video for the first time, but when I clicked on another mp4 video file, it did not play. Here is my source code.
private void playVideo(String fileLocation) { System.out.println("VideoProcesser Thread = " + Thread.currentThread().getName()); media = new Media(new File(fileLocation).toURI().toString()); mediaPlayer = new MediaPlayer(media); mediaView = new MediaView(mediaPlayer); runnable = () -> { System.out.println("Inside runnable VideoProcesser Thread = " + Thread.currentThread().getName()); mediaPlayer.play(); }; mediaPlayer.setOnReady(runnable); setVideoMediaStatus(PLAYING); pane.getChildren().add(mediaView); }
Then, since the video player screen was dark, I thought the problem was with the media view, so I added the following two lines:
if(mediaView == null) { mediaView = new MediaView(mediaPlayer); } mediaView.setMediaPlayer(mediaPlayer);
Now, when I click on different videos, my application just plays perfectly. Here is the complete code.
Media media; MediaPlayer mediaPlayer; MediaView mediaView; private void playVideo(String fileLocation) { System.out.println("VideoProcesser Thread = " + Thread.currentThread().getName()); media = new Media(new File(fileLocation).toURI().toString()); mediaPlayer = new MediaPlayer(media); mediaPlayer.setAutoPlay(true); if(mediaView == null) { mediaView = new MediaView(mediaPlayer); } mediaView.setMediaPlayer(mediaPlayer); mediaPlayer.play(); mediaPlayer.setOnError(() -> System.out.println("Current error: "+mediaPlayer.getError())); setVideoMediaStatus(PLAYING); pane.getChildren().add(mediaView); }
Please note that if you use FXML to create a media player, do not create it again. Re-creating this file may cause mediaView to lose the link to the original node. Refer to this post and reply to itachi, javafx mediaview only plays audio
karna
source share