2013-02-04 42 views
0

我创建了一个简单的VLCJ项目,它由一个简单的嵌入式播放器和一个退出按钮组成。AWT按钮不能在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.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。

谢谢!

+1

尝试使用JButton而不是按钮,混合重量和重量轻的组件并不是一个好主意 – MadProgrammer

+0

我尝试过使用JButton,但这会导致jpanel不能显示按钮。我也尝试过面板和jpanel的组合。 – user990639

+0

问题可能与美国东部时间内播放媒体有关。尝试在单独的线程中启动媒体(只需在EDT中设置和准备UI) – MadProgrammer

回答

1

感谢MadProgrammer的建议。我继续思考它,并尝试在run()中注释掉代码行。 JButton回来了!

但是,当我在run()中取消注释代码时,JButton消失了。我在想也许Swing runnable引起了JButton创建的问题。

因此,我所做的就是评论掉整个挥杆运行的,只是使用:

final Demo demo = new Demo(); 
demo.run(); 

演示现在可以播放视频和显示退出按钮,谢谢!