我遵循了一些关于将
JavaFX与Swing(JFrame)结合起来播放视频的教程,但我得到的只是一个黑屏,其中视频应该没有任何实际内容播放,也没有报告任何错误.
我在这里做错了什么,为什么视频不播放?
我尝试了几个.flv视频,其中没有一个会开始播放(当我在浏览器中打开它们时它们会播放)
我在安装了K-lite完整编解码器包的Windows 8.1 N Pro上运行jre7和jdk1.7.0_45
编辑:更新我的代码后jewelsea的评论,没有任何改变,黑盒仍然出现没有内容播放,控制台没有显示任何文字出现
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; } }