目前,我们在 Linux Redhat 6 环境中的 JavaFX 中的 WebViewer 开发中遇到了问题。使用 JavaFX 2.2 和 Java 1.7.0.51,我们有一个 WebViewer,可以转到其中包含视频标签的 HTML 页面。
它在我们的 Windows 机器上完美运行,但是在 Linux 机器上我们遇到以下异常:
Exception in thread "JavaFX Application Thread" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:704)
at com.sun.webpane.sg.prism.WCMediaPlayerImpl.prepareToPlay(WCMediaPlayerImpl.java:208)
at com.sun.webpane.platform.graphics.WCMediaPlayer.fwkPrepareToPlay(WCMediaPlayer.java:290)
at com.sun.webpane.platform.WebPage.twkProcessMouseEvent(Native Method)
at com.sun.webpane.platform.WebPage.dispatchMouseEvent(WebPage.java:751)
at javafx.scene.web.WebView.processMouseEvent(WebView.java:983)
at javafx.scene.web.WebView.access$2600(WebView.java:81)
at javafx.scene.web.WebView$14.handle(WebView.java:1136)
at javafx.scene.web.WebView$14.handle(WebView.java:1134)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3369)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3209)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3164)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1582)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2267)
at com.sun.javafx.tk.quantum.EmbeddedScene$2$1.run(EmbeddedScene.java:194)
at com.sun.javafx.tk.quantum.EmbeddedScene$2$1.run(EmbeddedScene.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.EmbeddedScene$2.run(EmbeddedScene.java:176)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:182)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:179)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:89)
at java.lang.Thread.run(Thread.java:744)
我会说显而易见的事情,似乎从 JavaFX 生成的线程在尝试加载视频时正在死亡。还有其他人遇到过这种性质的问题吗?关于尝试什么有什么想法吗?我们尝试过使用非常特定的 H-264 编解码器版本,但没有成功。关于如何设置 linux/javafx 环境以在 JavaFX WebView 中播放视频的任何想法也会有所帮助。
此外,需要澄清的是,该应用程序是带有嵌入式 JavaFX 的 Swing,但是它仍然出现在纯 JavaFX 实现中,略有不同的异常。
谢谢, 内森
更新:看起来我们可能没有正确安装编解码器。明天将更新答案以供将来引用。
最佳答案
看来我们没有在操作系统中正确内置任何/正确的编解码器,并且它必须是非常特定的编解码器版本。虽然配置不支持 Redhat 6.5,但它仍然可以按照发行版上宣传的那样工作。我们使用的编解码器是:libavcodec52 和 libavformat52,如下所述:http://www.oracle.com/technetwork/java/javafx/downloads/supportedconfigurations-1506746.html
令人遗憾的是,该异常没有解释真正出了什么问题。
关于Linux 中的 JavaFX WebEngine 视频播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23351657/