使用SwingNode在JavaFX中显示VlcJ
FXMLController初始化方法:
@FXML private VBox vbContainer; MediaPlayerVLC m_mediaPlayer; public void initialize(URL url, ResourceBundle rb) { final SwingNode swingNode = new SwingNode(); m_mediaPlayer = new MediaPlayerVLC(); createAndSetSwingContent(swingNode, m_mediaPlayer); vbContainer.getChildren().add(0, swingNode); }
而createAndSetSwingContent():
private void createAndSetSwingContent(final SwingNode swingNode, JComponent jComponent) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { swingNode.setContent(jComponent); } }); }
MediaPlayerVLC类:
package javafxswing; import javax.swing.JPanel; import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent; public class MediaPlayerVLC extends JPanel { private final EmbeddedMediaPlayerComponent mediaPlayerComponent; public MediaPlayerVLC() { setSize(350, 320); setVisible(true); mediaPlayerComponent = new EmbeddedMediaPlayerComponent(); mediaPlayerComponent.setSize(350, 320); add(mediaPlayerComponent); } public MediaPlayer getMediaPlayer() { return mediaPlayerComponent.getMediaPlayer(); } }
我在FXMLController中单击按钮来播放媒体:
@FXML private void handleButtonAction(ActionEvent event) { System.out.println("You clicked me!"); m_currentVideo = "video.mov"; m_mediaPlayer.getMediaPlayer().playMedia(m_currentVideo); }
现在,问题是:video开始播放,但我看不到图像。 我说它开始播放因为我能听到音频。 我究竟做错了什么?
任何帮助高度赞赏。
简而言之,它不会以这种方式工作。
从这里的Javdoc for SwingNode
: http : SwingNode
它部分地说:
JComponent实例中包含的组件层次结构不应包含任何重量级组件,否则SwingNode可能无法绘制它。
在vlcj的情况下, EmbeddedMediaPlayerComponent
扩展了Panel
,一个重量级的AWT组件。
要与vlcj一起使用JavaFX,您可能需要自己直接渲染video数据。 这就是vlcj所谓的DirectMediaPlayerComponent
的用途。 这种方法的本质是DirectMediaPlayerComponent
接收每帧video数据进行渲染,然后您可以使用PixelWriter
或其他一些方法PixelWriter
渲染。
这里有一个vlcj-javafx项目https://github.com/caprica/vlcj-javafx ,这种方法适用于Java7。 由于错误的线程,它不适用于Java8,在此处记录: https : //github.com/caprica/vlcj-javafx/issues/3
- 如何调试ContextLoader – 上下文初始化失败和BeanCreationException
- 如何读取和写入文件的HashMap?
- Java 8将Map <Integer,List >转换为Map <String,List > with
- Mockito Matchers之间有什么区别是A,any,eq和同样的?
- 如何使用HttpURLConnection获取重定向的URL和内容
- 由于加倍的上下文(servlet + ContextLoaderListener),所有Spring Framework bean都会重复
- Java中的Java FluentWait
- 类型中的方法不适用于参数
- 在运行时远程探测Scala / Java应用程序