2014-10-31 109 views
1

我正在做一个基于Java的媒体播放器,但我在全屏显示视频时遇到问题。VLCJ fullScreen错误无法加载库'X11':JNA原生支持(win32-x86/X11.dll)

当我使用components.getMediaPlayer().setFullScreen(true);我得到以下错误:

Exception in thread "JavaFX Application Thread" java.lang.UnsatisfiedLinkError: Unable to load library 'X11': JNA native support (win32-x86/X11.dll) not found in resource path

我使用JVM 32位,JNA 3.5.2和3.0.1 VLCJ。

从我所看到的是加载32位库,但我的操作系统是64位。这是问题吗?

回答

1

它看起来像你正试图加载Windows中的X11库。

这是行不通的。

vlcj使用Linux上的X11本机库将Java JFrame切换为全屏。

在Windows上,vlcj使用Win32 API提供了不同的本机解决方案。如果你想支持

mediaPlayerComponent = new EmbeddedMediaPlayerComponent() { 
     @Override 
     protected FullScreenStrategy onGetFullScreenStrategy() { 
      return new XFullScreenStrategy(frame); 
     } 
    }; 

当然:

mediaPlayerComponent = new EmbeddedMediaPlayerComponent() { 
     @Override 
     protected FullScreenStrategy onGetFullScreenStrategy() { 
      return new Win32FullScreenStrategy(frame); 
     } 
    }; 

在Linux上,你会使用这样的:

所以在Windows上,你可以在您创建的媒体播放器做这样的事情或者,您可以在运行时进行有条件检查,例如:

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