java - mac os jdk 1.8 问题 vlc control JAWT not load

标签 java swing vlcj

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)

最佳答案

vlcj/LibVLC 需要重量级 AWT 组件来呈现其视频。

OSX 上的 JDK 1.7 和更高版本中不再有任何 AWT。 OSX 上的 UI 工具包现在是完全轻量级的。

因此在 OSX 上使用 vlcj 的最佳方式不再有效。

你要做的就是使用所谓的"direct" media player [1]而不是“嵌入式”的。

使用直接媒体播放器的缺点是您必须以某种方式自己渲染视频,使用 BufferedImage、硬件加速 volatile 图像、PixelWriter 或其他东西。

这种方法通常会使用更多的内存和更多的 CPU,而且有点不方便。

从好的方面来说,使用这种方法可以实现流畅的高清视频播放。

另外,从好的方面来说,您可以根据需要以某种方式处理视频缓冲区,并使用这种方法轻松地将轻量级小部件/标签叠加在视频之上。

vlcj 测试源中提供了一个示例,展示了如何执行此操作的一种方法(此处复制的代码太多,因此我将提供 a stable link [2])。

project issue tracker [3]里面也有很长的讨论关于这个问题。

[1] http://caprica.github.io/vlcj/javadoc/3.0.0/uk/co/caprica/vlcj/player/direct/DirectMediaPlayer.html

[2] https://github.com/caprica/vlcj/blob/vlcj-3.0.1/src/test/java/uk/co/caprica/vlcj/test/direct/DirectTestPlayer.java

[3] https://github.com/caprica/vlcj/issues/205

令人惊讶的是,有一个潜在的解决方案,虽然显然不是最佳解决方案,它是在使用 Wine 的 OSX 上使用 Windows 1.7/1.8 JVM。我没有尝试过,但有人告诉我它有效。

关于java - mac os jdk 1.8 问题 vlc control JAWT not load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25638820/

相关文章:

java - JavaFX 中的隐形舞台/场景

java - Mac 与 Windows 中的字体渲染

java - SQLException 从 JTable 和数据库中删除行

java - GridBagLayout ipadY 和定位

error-handling - 禁用登录vlc

java - 在 Tomcat 服务器上使用 JSTL 标签库的问题

Java Try Catch block

java - JSP 的 Eclipse neon 3 热插拔不起作用

java - vlc4j 无法加载 libvlc.so

java - VLCJ 简单应用程序可以打包为 jar,但不能在 BlueJ 中使用