VlcJ Canvas 在上面

VlcJ Canvas on top

我正在使用 vlcJ 库在我的程序中播放来自另一个 VLC 进程(OutOfProcess 播放器)的视频。播放视频的vlcJ Canvas嵌入在JTabbedPane中的Component中。播放器初始化后,视频 canvas 出现在所有其他控件的前面。

我读到 heavy-/lightweight component,所以我知道 JRE 1.8 仍然无法正确处理重量级组件,当由嵌入在轻量级组件中的另一个进程绘制时。

Embedded heavyweight components must belong to the process that created the frame or applet. The heavyweight component must have a valid peer within the main process of the application (or applet).

所以我的问题是如何解决这个问题,使 Canvas 不会出现在前面 "unasked"?

选项卡 "Multimedia" 托管视频 canvas。尽管打开了另一个选项卡,但 canvas 仍然位于所有内容之上。打开主机选项卡 "Multimedia" 一次后,视频 canvas 会正常运行并保留在其选项卡中。

在@MadProgrammer 和@caprica 的帮助下,我找到了解决方法:因为我使用的是带 vlcJ-pro 的 OutOfProcess 播放器,所以我无法使用 "direct" 方法,因为player和canvas不是同一个进程。

隐藏和显示视频canvas也不是选项,因为绘制视频图像的组件必须始终可见(否则会出现严重异常)。

所以最后我将我的视频 canvas 打包成 JPanelCardLayout,然后我在空窗格和视频 canvas 之间切换。每次打开带有媒体播放器的选项卡时,视频 canvas 变为可见,否则为空窗格。 此解决方法似乎工作正常。