Java 顶部的VlcJ帆布

Java 顶部的VlcJ帆布,java,swing,awt,vlcj,Java,Swing,Awt,Vlcj,我正在使用库在我的程序中播放来自另一个VLCprocess(OutOfProcess播放器)的视频。播放视频的vlcJ画布嵌入JTabbedPane中的组件。当播放器初始化时,视频画布位于每个其他控件的顶部 我读过,所以我知道,JRE1.8仍然无法正确处理重量级组件,当它被嵌入在轻量级组件中的另一个进程拖拽时 嵌入式重量级组件必须属于 创建了框架或小程序。重量级组件必须具有 应用程序(或小程序)主进程中的有效对等方 所以我的问题是如何解决这个问题,这样Canvas就不会出现“未请求”的情况了

我正在使用库在我的程序中播放来自另一个
VLC
process(OutOfProcess播放器)的视频。播放视频的vlcJ
画布
嵌入
JTabbedPane
中的
组件
。当播放器初始化时,视频画布位于每个其他控件的顶部

我读过,所以我知道,
JRE
1.8仍然无法正确处理重量级组件,当它被嵌入在轻量级组件中的另一个进程拖拽时

嵌入式重量级组件必须属于 创建了框架或小程序。重量级组件必须具有 应用程序(或小程序)主进程中的有效对等方

所以我的问题是如何解决这个问题,这样
Canvas
就不会出现“未请求”的情况了


“多媒体”选项卡承载视频画布。尽管打开了另一个选项卡,但画布仍位于所有内容的顶部。当主机选项卡“多媒体”打开一次时,视频画布的行为正常并保持在其选项卡中。

在@MadProgrammer和@caprica的帮助下,我找到了一个解决办法:因为我使用的是带
vlcJ-pro
的OutOfProcess播放器,所以我不能使用“直接”方法,因为播放器和画布不是同一个过程

隐藏和显示视频画布也没有选项,因为绘制视频图像的组件必须始终可见(否则会发生严重异常)

最后,我用
CardLayout
将我的视频画布包装成
JPanel
,并在空窗格和视频画布之间切换。每次打开带有mediaplayer的选项卡时,视频画布将变为可见,否则将显示空窗格。
这个解决方法似乎很好。

正如你所说,你根本无法做到。重型组件没有任何z-orderingOk的概念,但是没有任何解决方法吗?当我打开视频画布的“主页”选项卡一次时,视频画布将保留在背景中。因此,要获得正确的行为并非不可能,但在打开视频画布的“祖先”选项卡之前,z顺序是不受尊重的。不,根本没有解决方法,一般的经验法则是不要混合使用轻型和重型容器。它有时或在“某些”条件下“可能”工作,但是,没有明显的原因,它将停止工作或影响其他组件。但是,当选项卡被选中/未选中时,您可以添加和删除
画布
?我想您可以自己使用“直接”方法而不是“嵌入”方法渲染视频方法,性能稍差。