Java VLCJ中不可单击AWT按钮
我创建了一个简单的VLCJ项目,它由一个简单的嵌入式播放器和一个退出按钮组成 代码如下:Java VLCJ中不可单击AWT按钮,java,swing,awt,mixing,vlcj,Java,Swing,Awt,Mixing,Vlcj,我创建了一个简单的VLCJ项目,它由一个简单的嵌入式播放器和一个退出按钮组成 代码如下: 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.ActionList
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);
}
}
}
}
问题是按钮确实会显示,但无法单击。当我移除视频窗格时,它又回到了可点击状态!如果我遗漏了什么,有什么想法吗
我正在为vlcj使用2.1.0版
谢谢 谢谢你的建议。我继续思考,并尝试注释run()中的代码行。按钮回来了 但是,当我在run()中取消注释代码时,JButton消失了。我在想可能Swing runnable导致了JButton的创建问题 因此,我所做的是注释掉整个Swing runnable并使用:
final Demo demo = new Demo();
demo.run();
演示现在可以播放视频并显示退出按钮,谢谢 尝试使用JButton而不是按钮,混合使用重型和轻型组件从来不是一个好主意。我尝试过使用JButton,但这会导致jpanel甚至不显示按钮。我也尝试了panel和jpanel的组合。问题可能与在EDT中播放媒体有关。尝试在单独的线程中启动介质(只需先在EDT中设置并准备UI)