在Linux / Ubuntu中移动JFrame时,VLCJ MediaPlayerComponent落后

时间:2017-01-27 04:59:20

标签: java swing ubuntu vlcj

我的代码需要使用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");
}

1 个答案:

答案 0 :(得分:0)

我发现在我的情况下,这是由于显卡驱动程序中的错误造成的。我使用Intel HD 520显卡在Ubuntu 16.04 LTS上运行我的代码。有关错误的信息:https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1537053