【问题标题】:Playing Video in JavaFX8在 JavaFX8 中播放视频
【发布时间】:2015-03-16 06:54:25
【问题描述】:

我是 JavaFX 的新手,我目前正在使用一个在应用程序开头播放视频 (.MP4) 的应用程序,但是,我似乎无法让它工作!请告诉我我的代码有什么问题:

import java.io.File;
import javafx.geometry.Pos;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.scene.text.Text;

public class NoConnection {

    private StackPane root;

    public NoConnection(){
        Media media = null;
        try{
            File video = new File("video.mp4");
            String url = video.toURI().toURL().toString();
            System.out.println("URL: "+url);
            media = new Media(url);
        }catch(Exception e){
        System.err.println(e.toString());
    }
        MediaPlayer player = new MediaPlayer(media);
        player.play();
        MediaView mediaView = new MediaView(player);

        root = new StackPane();
        root.setAlignment(Pos.CENTER);
        root.setStyle("-fx-background-color : white;");
        root.getChildren().add(mediaView);
    }

    public StackPane getLayout(){
        return root;
    }

}

顺便说一下,我运行的是 Windows XP!

这是完整的错误:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/11461388.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl$$Lambda$46/31501478.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$38/29531133.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • File 存在吗?你试过video.toURI().toURL().toExternalForm()吗?您使用的是哪个 Java/JavaFX 版本?
  • 当然!!它存在!
  • 这是操作系统问题吗,我目前使用的是 Windows XP。
  • 请放慢速度,慢慢来,解释你的问题。你还没有表达出什么是行不通的。是的:从 Java 8 开始,Oracle 正式不再支持 WindowsXP。
  • 它在 Windows 7 中运行!不在 XP 中!

标签: java javafx javafx-8


【解决方案1】:

这就是所有要做的事情:用这段代码创建一个 java 类:

public class VideoTest extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        StackPane root = new StackPane();

        MediaPlayer player = new MediaPlayer( new Media(getClass().getResource("video.mp4").toExternalForm()));
        MediaView mediaView = new MediaView(player);

        root.getChildren().add( mediaView);

        Scene scene = new Scene(root, 1024, 768);

        primaryStage.setScene(scene);
        primaryStage.show();


        player.play();

    }

}

并将 video.mp4 放入同一个文件夹中。启动它。视频应该会播放。

顺便说一句,我使用您的代码发现文件未找到异常。并且不再支持 Windows XP。无论是甲骨文还是微软。如果这个简单的代码不起作用,那么你就会遇到另一个问题。

【讨论】:

  • 出现错误! java.lang.NullPointerException,请看上面更新的代码!
  • 我创建了一个新项目并按照您的代码进行操作!!!上面的代码不是同一个项目...
  • 我修复了java.lang.NullPointerException,这一次没有错误但不幸的是视频没有出现!!!请帮忙!!!
  • 顺便说一下,视频大小是 250mb.. 可以吗?
  • 取决于视频。尝试另一个。你不能。 G。以 60 fps 播放视频。 NPE 有什么问题?
【解决方案2】:

答案如下:

在 JavaFX SDK 支持的平台上,媒体堆栈支持 FLV 容器。以这种格式编码的单个电影可以在支持的平台上无缝运行。服务器端需要标准 FLV MIME 设置才能启用媒体流。

JavaFX SDK 支持的所有操作系统也支持 MPEG-4 多媒体容器。在 Mac OS X 和 Windows 7 平台上,无需额外软件即可播放。但是,Linux 操作系统和早于 Windows 7 的 Windows 版本需要安装现成的第三方软件包,如 JavaFX 系统要求中所述。 AAC 和 H.264/AVC 解码具有某些与平台相关的限制,如 JavaFX 发行说明中所述。

某些音频和视频压缩类型的解码依赖于特定于操作系统的媒体引擎。 JavaFX 媒体框架不会尝试处理这些本机引擎支持的所有多媒体容器格式和媒体编码。相反,该框架试图在支持 JavaFX 的所有平台上提供等效且经过良好测试的功能。

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 2012-09-18
    • 2012-08-09
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多