我遵循了一些关于将
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;
- }
- }