JavaFX video cannot be played
I followed some tutorials on playing video by combining JavaFX with swing (JFrame), but all I got was a black screen, in which the video should have no actual content to play, and no errors were reported
What did I do wrong here? Why didn't the video play?
I tried a few Flv videos, none of which will start playing (they will play when I open them in my browser)
I run jre7 and jdk1.0 on Windows 8.1 n pro with the K-Lite full codec package installed 7.0_ forty-five
Editor: after updating my code, jewelsea's comments have not changed, the black box still appears, no content is played, and no text appears on the console
package com.example.test; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.event.Event; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.SceneBuilder; import javafx.scene.media.Media; import javafx.scene.media.MediaErrorEvent; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.scene.paint.Color; import javax.swing.*; public class Main { public static void main(String[] args) { SwingUtilities.invokelater(new Runnable() { @Override public void run() { initAndShowGUI(); } }); } private static void initAndShowGUI() { // This method is invoked on the EDT thread JFrame frame = new JFrame("Test"); final JFXPanel fxPanel = new JFXPanel(); frame.add(fxPanel); frame.setSize(640,480); frame.setVisible(true); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); Platform.runLater(new Runnable() { @Override public void run() { initFX(fxPanel); } }); } private static void initFX(JFXPanel fxPanel) { // This method is invoked on the JavaFX thread Scene scene = createScene(); fxPanel.setScene(scene); } private static Scene createScene() { String source; Media media; MediaPlayer mediaPlayer; MediaView mediaView = null; try { media = new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv"); if (media.getError() == null) { media.setOnError(new Runnable() { public void run() { // Handle asynchronous error in Media object. System.out.println("Handle asynchronous error in Media object"); } }); try { mediaPlayer = new MediaPlayer(media); mediaPlayer.setAutoPlay(true); if (mediaPlayer.getError() == null) { mediaPlayer.setOnError(new Runnable() { public void run() { // Handle asynchronous error in MediaPlayer object. System.out.println("Handle asynchronous error in MediaPlayer object"); } }); mediaView = new MediaView(mediaPlayer); mediaView.setOnError(new EventHandler() { public void handle(MediaErrorEvent t) { // Handle asynchronous error in MediaView. System.out.println("Handle asynchronous error in MediaView: "+ t.getMediaError()); } @Override public void handle(Event arg0) { // TODO Auto-generated method stub System.out.println("Handle asynchronous error in MediaView arg0: "+arg0.toString()); } }); } else { // Handle synchronous error creating MediaPlayer. System.out.println("Handle synchronous error creating MediaPlayer"); } } catch (Exception mediaPlayerException) { // Handle exception in MediaPlayer constructor. System.out.println("Handle exception in MediaPlayer constructor: "+ mediaPlayerException.getMessage()); } } else { // Handle synchronous error creating Media. System.out.println("Handle synchronous error creating Media"); } } catch (Exception mediaException) { // Handle exception in Media constructor. System.out.println("Handle exception in Media constructor: "+mediaException.getMessage()); } Group root = new Group(); Scene scene = SceneBuilder.create().width(640).height(480).root(root).fill(Color.WHITE).build(); if(mediaView != null) { root.getChildren().add(mediaView); } return scene; } }
Solution
So I installed the Windows Media feature pack so that Adobe Premiere Pro can work normally (because it requires a DLL file from the Windows Media Player (I didn't install it because I'm running n version of windows). Now the video is really played for me
I can't say 100% confirmation because WMP is not installed, because the media feature pack may have installed other things that solved my problem, but the problem has been solved:)
I want to thank others for trying the answers. I really appreciate it