0
간단한 내장 플레이어와 종료 버튼으로 구성된 간단한 VLCJ 프로젝트를 만들었습니다.VLCJ에서 AWT 버튼을 클릭 할 수 없습니다.
package test;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
public class Demo {
private final JFrame frame;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
private JPanel videoPane;
private JPanel buttonPane;
private Button exitButton;
private ActionListener a;
private static String vlc_location = "C:\\Program Files\\VideoLAN\\VLC";
public static void main(String[] args) {
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), vlc_location);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().run();
}
});
}
public Demo() {
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
a = new MyActionListener();
exitButton = new Button("Exit");
exitButton.setActionCommand("Exit app");
exitButton.addActionListener(a);
buttonPane = new JPanel();
buttonPane.setLayout(new BorderLayout());
buttonPane.setBackground(Color.black);
buttonPane.add(exitButton, BorderLayout.CENTER);
videoPane = new JPanel();
videoPane.setLayout(new BorderLayout());
videoPane.setBackground(Color.black);
videoPane.add(mediaPlayerComponent, BorderLayout.CENTER);
videoPane.add(buttonPane, BorderLayout.PAGE_END);
frame = new JFrame("vlcj demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.setSize(1200, 800);
frame.setContentPane(videoPane);
frame.setVisible(true);
}
public void run() {
mediaPlayerComponent.getMediaPlayer().playMedia(video_file);
}
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
String s = arg0.getActionCommand();
if (s.equals("Exit")) {
System.exit(0);
}
}
}
}
문제는 버튼이 표시 않지만 그것을 클릭 할 수 없다는 것입니다 다음과 같이
코드입니다. videoPane을 삭제하면 다시 클릭 가능합니다! 어떤 아이디어라도 놓치면 어떨까요?
vlcj 버전 2.1.0을 사용하고 있습니다.
감사합니다.
버튼 대신 JButton을 사용하여 무겁고 가벼운 구성 요소를 혼합하는 것은 좋은 생각이 아닙니다. – MadProgrammer
JButton을 사용해 보았지만 jpanel이 버튼을 표시하지 않습니다. 나는 패널과 jpanel의 조합도 시도했다. – user990639
문제는 EDT 내에서 미디어를 재생하는 것과 관련이 있습니다. 별도의 스레드에서 미디어를 시작해보십시오 (EDT에서 UI를 설정하고 준비하기 만하면됩니다). – MadProgrammer