我的代码需要使用Java 8支持Windows和Linux(理想情况下也支持Mac,但我知道如果我们使用较新的Java版本,VLCJ在Mac上运行会有一些问题)。这个滞后的问题不会发生在Windows上,而是发生在Linux上(我使用的是Ubuntu 16.04 LTS)。我将MediaPlayerComponent设置为JFrame的contentPane。当我拖动播放器(即JFrame)时,MediaPlayerComponent部件将继续保持旧位置一秒左右,然后快速回到JFrame。如果我在完成视频播放后拖动播放器,MediaPlayerComponent部件将不会快照回到JFrame,如果我在桌面上移动一个窗口,该窗口将位于JFrame和MediaPlayerComponent对象之间。 MediaPlayerComponent Separated From JFrame Web Browser Sandwiches Between MediaPlayerComponet and JFrame 我的代码:
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");
}
答案 0 :(得分:0)
我发现在我的情况下,这是由于显卡驱动程序中的错误造成的。我使用Intel HD 520显卡在Ubuntu 16.04 LTS上运行我的代码。有关错误的信息:https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1537053