使用 SwingNode 在 JavaFX 中显示 VlcJ

2024-03-22

FXMLController初始化方法:

@FXML
private VBox vbContainer;
MediaPlayerVLC m_mediaPlayer;

public void initialize(URL url, ResourceBundle rb) {
        final SwingNode swingNode = new SwingNode();

        m_mediaPlayer = new MediaPlayerVLC();
        createAndSetSwingContent(swingNode, m_mediaPlayer);

        vbContainer.getChildren().add(0, swingNode);
    }

并创建AndSetSwingContent():

private void createAndSetSwingContent(final SwingNode swingNode, JComponent jComponent) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                swingNode.setContent(jComponent);
            }
        });
    }

MediaPlayerVLC 类:

package javafxswing;

import javax.swing.JPanel;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;

public class MediaPlayerVLC extends JPanel {

    private final EmbeddedMediaPlayerComponent mediaPlayerComponent;

    public MediaPlayerVLC() {

        setSize(350, 320);
        setVisible(true);        
        mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
        mediaPlayerComponent.setSize(350, 320);
        add(mediaPlayerComponent);
    }

    public MediaPlayer getMediaPlayer() {
        return mediaPlayerComponent.getMediaPlayer();
    }
}

我通过在 FXML 控制器中单击按钮来播放媒体:

@FXML
private void handleButtonAction(ActionEvent event) {
     System.out.println("You clicked me!");
     m_currentVideo = "video.mov";
     m_mediaPlayer.getMediaPlayer().playMedia(m_currentVideo);
}

现在,问题是:视频开始播放,但我看不到图像。我说它开始播放是因为我能听到音频。我究竟做错了什么?

非常感谢任何帮助。


简而言之,这样是行不通的。

来自 Javdoc 的SwingNode here: http://docs.oracle.com/javase/8/javafx/api/javafx/embed/swing/SwingNode.html http://docs.oracle.com/javase/8/javafx/api/javafx/embed/swing/SwingNode.html

它部分指出:

JComponent 实例中包含的组件层次结构不应包含任何重量级组件,否则 SwingNode 可能无法绘制它。

对于 vlcj 来说,EmbeddedMediaPlayerComponent延伸Panel,一个重量级的AWT组件。

要与 JavaFX 一起使用 vlcj,您可能必须自己直接渲染视频数据。这就是vlcj所谓的DirectMediaPlayerComponent是为了.这种方法的本质是DirectMediaPlayerComponent接收要渲染的每一帧视频数据,然后您可以使用PixelWriter或者你想出的其他方法。

这里有一个vlcj-javafx项目https://github.com/caprica/vlcj-javafx https://github.com/caprica/vlcj-javafx,并且这种方法适用于 Java7。由于错误的线程,它不适用于 Java8,记录如下:https://github.com/caprica/vlcj-javafx/issues/3 https://github.com/caprica/vlcj-javafx/issues/3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SwingNode 在 JavaFX 中显示 VlcJ 的相关文章

随机推荐

  • Web 控制浏览器后退按钮

    我正在使用导航 2 和setUrlStrategy PathUrlStrategy 我添加了WillPopScope但是onWillPop单击浏览器的后退按钮时不会调用 Widget build context return WillPop
  • 了解 LISP 中的绑定变量和自由变量

    我正在阅读SICP 又出现了绑定变量和自由变量的话题 然而 我对此感到困惑 术语 绑定变量 仅适用于形式参数变量吗 此外 文本还指出过程定义 绑定 其形式参数 这让我感到困惑 因为有些人说我们将值 绑定 到变量 显然 当我们谈论不同类型的变
  • Gulp 复制空目录

    In my gulp构建我已经创建了一个运行的任务after所有的编译 丑化和缩小都已经发生 此任务只是复制所有内容src进入dest早期任务尚未触及 处理的目录 我遇到的一个小问题是 这会导致目录中出现空目录dest目录 有没有办法告诉g
  • [UWP]调整BitmapImage的大小、压缩并获取base64字符串

    这是我的第一个主题 我正在 UWP 中重写在 Silverlight 8 WP8 中开发的应用程序 我在从 BitmapImage 获取 Base64 编码字符串时遇到问题 我工作了很多天都找不到解决方案 总之我需要 从设备图库中选择图像
  • H2 控制台和 Spring Security - PermitAll() 不起作用

    我正在创建rest api并实现Spring Security 一切正常 但我希望 目前 当我仍在开发时 能够让任何未经授权的人打开localhost 8080 console 我的代码 Override protected void co
  • docker-desktop 使用 12 GB RAM 来运行一个具有 24 MB RAM 的容器?

    在我看来就像 WSL2 容器docker desktop使用 12 GB RAM 来运行一个具有 24 MB RAM 的容器 是什么赋予了 详情如下 另外 当我将所有进程中的所有驻留 RAM VSZ 加起来时docker desktop 总
  • 使用 Node.js 在 Mongodb 中存储 JS 函数时出现问题

    我有一个简单的 JS 类 var User function id this id id this sayHello function return hello 然后 我使用默认的 Node js 驱动程序将其存储在 MongoDB 中 u
  • 在 Razor 中显示表达式值

    我想在剃刀视图中将以下表达式的值显示为文本 doc Extension string Empty ToUpperInvariant 我已经尝试了所有变体 但似乎没有任何效果 我知道我可以使用临时变量来存储该表达式的值 但我想知道是否有一种方
  • 如何解码/重新创建 Google Flights 搜索网址?

    问题 On 谷歌航班 http www google com travel flights 搜索信息被编码在 URL 参数中 这样用户就可以轻松地彼此共享航班搜索 URL 格式如下所示 https www google com travel
  • Spring Boot - RestController 反序列化 YAML 上传?

    如何配置 Spring Boot RestController 来接受 YAML 上传 下面的结果是 415 我从调试中可以看到MappingJackson2HttpMessageConverter我的 Spring 上下文中的实例仅支持
  • 在 React.js 中以组件状态存储表单输入,特别是密码

    有一个关于 React js 中表单的问题 我实际上没有问题 但想知道我的方法是否有任何缺陷 我有一个简单的表单 有两个电子邮件和密码输入 如下所示
  • 如何加速我的 Android-openCV 应用程序?

    我已经实现了一个 openCV 应用程序 我使用 SURF 描述符 它工作正常 代码如下所示 我减小输入视频流的大小以加快速度 capture set Highgui CV CAP PROP FRAME WIDTH display getW
  • 通过excel vba GUI将excel文件导出为txt格式

    我的目标是将excel文件导出为txt文件格式 这个想法是有一个 GUI 让用户选择她 他想要导出的 Excel 文件 并且她 他可以决定保存哪个文件路径和文件名 用户完成输入输出设置后 只需点击导出文本按钮即可将excel文件导出为txt
  • 如何向 Java 应用程序的 Windows 资源管理器添加上下文菜单?

    如何为 Java 应用程序添加一个子菜单项到 Windows 资源管理器上下文菜单 例如 7 Zip 就是这样做的 我知道有两种方法可以做到这一点 最奇特的方法是编写一个 Windows shell 扩展 我相信这就是 powerarchi
  • 在构造函数之外使用 .setVisible() 会破坏我的 GUI

    我现在正在学习java GUI的基础知识 我遇到了这种奇怪的情况 我无法真正解释 我有一个 GUI 类 我在其中构建了一个简单的 JFrame 如果我使用 setVisible true 在构造函数内如果我使用它 一切正常outside 没
  • 有什么方法可以将 ActionScript 3 中的常规字符串转换为 Latin-1 字符代码的 ByteArray?

    我在将字符串转换为 UTF 16 编码字符的 byteArray 时没有问题 但我尝试与之通信的应用程序 用 Erlang 编写 仅理解 Latin 1 编码 有什么方法可以从 Actionscript 3 中的字符串生成充满 Latin
  • 打开开发人员工具时,Javascript onclick 不会触发

    我最近遇到一个问题 当浏览器中的开发人员工具打开时 HTML 按钮的 onclick 事件不会触发 但当工具关闭时 它会触发
  • xcodebuild安装路径?

    我正在使用 xcode 开发 iPhone 应用程序 我想自动化 构建和运行 过程 因此想知道是否有任何方法可以在模拟器或设备上安装构建的应用程序 有xcodebuild install命令但我不知道如何设置安装目录DSTROOT到模拟器
  • Bootstrap 按钮组预选按钮,仅含 html

    使用 Bootstrap 我想要一个按钮组 但预选了一个按钮 如果我使用下面的 html 那么第一个按钮将被预先选择 但即使我单击其他按钮之一 它仍然保持活动状态 仅使用 html 如何定义选择一个按钮的按钮组 当我单击其他按钮之一时 该按
  • 使用 SwingNode 在 JavaFX 中显示 VlcJ

    FXMLController初始化方法 FXML private VBox vbContainer MediaPlayerVLC m mediaPlayer public void initialize URL url ResourceBu