我正在使用基于Java的媒体播放器,但我在全屏显示视频时遇到问题。
当我使用components.getMediaPlayer().setFullScreen(true);
时,我收到以下错误:
线程“JavaFX应用程序线程”中的异常 java.lang.UnsatisfiedLinkError:无法加载库'X11':JNA 资源路径中找不到本机支持(win32-x86 / X11.dll)
我使用JVM 32Bit,JNA 3.5.2和VLCJ 3.0.1。
从我所看到的是加载32位库,但我的操作系统是64位。这是问题吗?
答案 0 :(得分:1)
看起来您正在尝试在Windows中加载X11库。
这不会起作用。
vlcj使用Linux上的X11本机库将Java JFrame切换为全屏。
在Windows上,vlcj使用Win32 API提供了不同的本机解决方案。
因此,在Windows上,您可以在创建媒体播放器时执行以下操作:
mediaPlayerComponent = new EmbeddedMediaPlayerComponent() {
@Override
protected FullScreenStrategy onGetFullScreenStrategy() {
return new Win32FullScreenStrategy(frame);
}
};
在Linux上你会使用这样的东西:
mediaPlayerComponent = new EmbeddedMediaPlayerComponent() {
@Override
protected FullScreenStrategy onGetFullScreenStrategy() {
return new XFullScreenStrategy(frame);
}
};
当然,如果您想要支持/或,您可以在运行时进行条件检查,例如:
mediaPlayerComponent = new EmbeddedMediaPlayerComponent() {
@Override
protected FullScreenStrategy onGetFullScreenStrategy() {
if (RuntimeUtil.isWindows()) {
return new Win32FullScreenStrategy(frame);
}
else {
return new XFullScreenStrategy(frame);
}
}
};
为什么以这种方式实现全屏功能?
这是因为使用核心Java的全屏功能是不可靠的 - 在某些Windows版本上它可能是完全屏幕的,例如,除了任务栏之外,在某些Linux窗口管理器上它可能根本不起作用。
回答有关32位DLL与64位操作系统的问题:此处重要的是您的JVM体系结构是否为32位,即JVM体系结构必须与您尝试加载的共享库的体系结构相匹配。