VLCJ fullScreen错误无法加载库'X11':JNA原生支持(win32-x86 / X11.dll)

时间:2014-10-31 17:52:01

标签: java media-player vlcj

我正在使用基于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位。这是问题吗?

1 个答案:

答案 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体系结构必须与您尝试加载的共享库的体系结构相匹配。