JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Can't load JAWT
at com.sun.jna.Native.getWindowHandle0(Native Method)
at com.sun.jna.Native$AWT.getComponentID(Native.java:1879)
at com.sun.jna.Native.getComponentID(Native.java:253)
at uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface.attach(CanvasVideoSurface.java:69)
at uk.co.caprica.vlcj.player.embedded.DefaultEmbeddedMediaPlayer.attachVideoSurface(DefaultEmbeddedMediaPlayer.java:156)
at uk.co.caprica.vlcj.player.embedded.DefaultEmbeddedMediaPlayer.onBeforePlay(DefaultEmbeddedMediaPlayer.java:315)
at uk.co.caprica.vlcj.player.DefaultMediaPlayer.play(DefaultMediaPlayer.java:705)
at uk.co.caprica.vlcj.player.DefaultMediaPlayer.playMedia(DefaultMediaPlayer.java:222)
at viziosecure360.Travizia.AddPlayer(Travizia.java:675)
at viziosecure360.Travizia.setDefault(Travizia.java:234)
at viziosecure360.Travizia$1.run(Travizia.java:187)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Run Code Online (Sandbox Code Playgroud)
vlcj/LibVLC需要一个重量级的AWT组件来呈现其视频.
在OSX上JDK 1.7及更高版本中不再有任何AWT.OSX上的UI工具包现在完全轻量级.
因此,在OSX上使用vlcj的最佳方式不再有效.
你要做的就是使用所谓的"直接"媒体播放器[1]而不是"嵌入式" 播放器.
使用直接媒体播放器的缺点是你必须以某种方式自己渲染视频,使用BufferedImage,硬件加速易失性图像,PixelWriter或其他东西.
这种方法通常使用更多的内存和更多的CPU,并且更加不方便.
从好的方面来说,使用这种方法可以实现流畅的高清视频播放.
另外,如果需要,您可以以某种方式处理视频缓冲区,并使用此方法轻松地在视频上叠加轻量级窗口小部件/标签.
vlcj测试源中提供了一个示例,其中显示了一种如何执行此操作的方法(此处有太多代码要重现,因此我将提供稳定的链接[2]).
关于这个问题的项目问题跟踪器[3]也有很长的讨论.
[1] http://caprica.github.io/vlcj/javadoc/3.0.0/uk/co/caprica/vlcj/player/direct/DirectMediaPlayer.html
[3] https://github.com/caprica/vlcj/issues/205
令人惊讶的是,有一种潜在的,但显然不是最佳的解决方案,即使用Wine在OSX上使用Windows 1.7/1.8 JVM.我没有尝试过,但我被告知它有效.