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 打包成 JPanel
和 CardLayout
,然后我在空窗格和视频 canvas 之间切换。每次打开带有媒体播放器的选项卡时,视频 canvas 变为可见,否则为空窗格。
此解决方法似乎工作正常。
我正在使用 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"?
在@MadProgrammer 和@caprica 的帮助下,我找到了解决方法:因为我使用的是带 vlcJ-pro
的 OutOfProcess 播放器,所以我无法使用 "direct" 方法,因为player和canvas不是同一个进程。
隐藏和显示视频canvas也不是选项,因为绘制视频图像的组件必须始终可见(否则会出现严重异常)。
所以最后我将我的视频 canvas 打包成 JPanel
和 CardLayout
,然后我在空窗格和视频 canvas 之间切换。每次打开带有媒体播放器的选项卡时,视频 canvas 变为可见,否则为空窗格。
此解决方法似乎工作正常。