Я пытаюсь нарисовать на EmbeddedMediaPlayerComponent (из VLCJ 4), чтобы впоследствии я мог рисовать изображения или пользовательские анимированные объекты кнопок поверх воспроизводимого видео. Вот мой код:
код-листинг 1: Main.java
public class Main {
public static void main(String[] args) {
AppFrame appFrame = new AppFrame();
appFrame.play("path/to/video.mp4");
}
}
код-листинг 2: AppFrame.java
import javax.swing.JFrame;
public class AppFrame extends JFrame {
private AppPanel appPanel;
public AppFrame(){
super("VLCJ JFrame");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
appPanel = new AppPanel();
this.setContentPane(appPanel);
this.setVisible(true);
}
public void play(String path) {
Thread thread = new Thread(appPanel);
thread.start();
appPanel.mediaPlayer().media().play(path);
}
}
листинг кода 3: AppPanel.java
import java.awt.*;
import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;
public class AppPanel extends EmbeddedMediaPlayerComponent implements Runnable {
private Rectangle r = new Rectangle(0,0,100,100);
public AppPanel(){
setLayout(null); //commenting this line will show the video
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillRect(this.getWidth()/2-r.width/2, this.getHeight()/2-r.height/2, r.width, r.height);
}
public void run() {
while(true){
try {
Thread.sleep(75);
} catch (InterruptedException ex) {}
repaint();
}
}
}
Проблема заключается в том, что я комментирую строку в конструкторе AppPanel.java, которая говорит setLayout (null)(строка, которая, кстати, мне не нужна), видео появится. И если я не прокомментирую это, тогда видео исчезнет, и в этом месте мы увидим зеленый квадрат, который должен появиться сверху видео. А за этим зеленым квадратом - черный фон (обычно это не цвет JPanel, который расширяет EmbeddedMediaPlayerComponent).