Добавление видеоплеера в JPanel в java с помощью VLCJ

В настоящее время у меня есть две работы, которые я хочу объединить. У меня есть простой медиаплеер, работающий в JFrame, и графический интерфейс, в который я хотел бы добавить воспроизведение видео на JPanel.

Код для создания окна видеоплеера выглядит следующим образом:

private final JFrame vidFrame;
private final EmbeddedMediaPlayerComponent vidComp;

//Creates JPanel for video player
public Video() {

    vidFrame = new JFrame("VLC video test");
    vidFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    vidFrame.setLocation(100, 100);
    vidFrame.setSize(800, 800);

    vidComp = new EmbeddedMediaPlayerComponent();

    //This is the point where I am trying to add the video player to the GUI
    MainWindow.vidPanel.add(vidComp);

    vidFrame.add(vidComp);
    vidFrame.setVisible(true);
}

И это панель, на которую я пытаюсь добавить плеер:

    JPanel vidPanel = new JPanel();
    vidPanel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
    vidPanel.setBounds(10, 11, 532, 400);
    contentPane.add(vidPanel);

Я получаю сообщение об ошибке: "vidPanel не может быть разрешен или не является полем"

Кто-нибудь знает, как я могу это исправить?


person jazibobs    schedule 27.05.2012    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. Этот второй фрагмент кода должен был скомпилироваться или показать другую ошибку, если он закодирован, как показано. Кстати - setBounds(.. Используйте макеты, чтобы избежать проблем позже.   -  person Andrew Thompson    schedule 28.05.2012


Ответы (3)


Во-первых, похоже, что ваша vidPanel является локальной переменной и должна быть полем, если вам нужно получить к ней доступ из других методов. Это довольно базовая часть Java - любой учебник для начинающих должен охватывать это. VLCJ — не самая простая вещь в использовании, и вы можете запутаться, если не разбираетесь в основах.

Во-вторых, прежде чем вы зайдете слишком далеко по этому пути, встроенный проигрыватель VLCJ не работает с JPanel, только с собственным холстом AWT, поэтому вам нужно будет использовать его вместо этого.

person Michael Berry    schedule 28.05.2012
comment
Спасибо за ваш вклад. Я потратил много времени, чтобы освежить свои знания в основах и реструктурировать свой проект, чтобы добиться требуемой реализации :) - person jazibobs; 29.05.2012

У меня была такая же проблема, и я решил ее сегодня. Проблема в том, что вы используете JPanel, и вы никогда не сможете посмотреть там видео, вместо этого вы должны использовать Canvas. Вот что сработало для меня:

    Canvas canvas = new Canvas();
    MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
    CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
    EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
    mediaPlayer.setVideoSurface(videoSurface);

    mediaPlayer.playMedia(String with the name of the file);

Я использую JDK 1.6 и VLCJ 2.1.

Если вы используете IDE, просто поместите Canvas точно так же, как вы разместили JPanel, и удалите первую строку.

Удачи

person pelutxe    schedule 30.05.2012

Прежде всего мне кажется, что vidPanel определяется как локальная переменная, сделайте ее полем-членом, определив в области класса (а не в методе).

Это не то, как вы делаете в реальном поддерживаемом коде, а просто для быстрого решения вашей проблемы: определите функцию getVidPanel() в MainWindow, которая возвращает vidPanel.

Затем вместо ошибочной строки используйте следующее:

MainWindow aMainWindowInstance = new MainWindow();
aMainWindowInstance.getVidPanel().add(vidComp);
person Hakan Serce    schedule 27.05.2012