我的代码需要支持使用Java 8的Windows和Linux(理想情况下也是Mac,但我知道如果我们使用较新的Java版本,VLCJ在Mac上运行会有一些问题)。这个滞后问题不会发生在Windows上,而是发生在Linux上(我使用的是Ubuntu 16.04 LTS)。我正在将MediaPlayerComponent设置为JFrame的内容窗格。当我拖动播放器(即JFrame)时,MediaPlayerComponent部分将继续在旧位置停留一秒钟左右,然后重新回到JFrame中。如果我在视频播放完毕后拖动播放器,MediaPlayerComponent 部分将不会回 JFrame,如果我在桌面上移动窗口,该窗口将位于 JFrame 和 MediaPlayerComponent 对象之间。媒体播放器组件与 JFrame 分离MediaPlayerComponet 和 JFrame 之间的 Web 浏览器三明治我的代码:
private void setUpPlayer(int x, int y, int width, int height) {
frame = new JFrame();
frame.setBounds(x, y, width, height);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
System.exit(0);
}
});
frame.setLayout(new BorderLayout());
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
player = mediaPlayerComponent.getMediaPlayer();
frame.add(mediaPlayerComponent, BorderLayout.CENTER);
JPanel controlsPane = new JPanel();
...
frame.add(controlsPane, BorderLayout.SOUTH);
player.addMediaPlayerEventListener(new MediaPlayerEventAdapter() {...}
frame.setVisible(true);
}
public void launchPlayer(int x, int y, int width, int height) {
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), getVLCLibPath());
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
setUpPlayer(x, y, width, height);
}
});
}
// Can be called to load video again and again
public void loadVideo(String videoPath) {
player.stop();
player.prepareMedia(videoPath);
}
public static void main(String[] args) {
Player player = new Player();
player.launchPlayer(0,0,350,500);
player.loadVideo("video-path");
}
我发现就我而言,这是由于显卡驱动程序中的错误造成的。我在带有英特尔HD 520显卡的Ubuntu 16.04 LTS上运行了我的代码。有关该错误的信息:https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1537053