2017-04-22 2 views
1

J'utilise la liaison VLCJ pour créer un lecteur vidéo.JFrame ne se ferme pas complètement

Mon code:

public class MyVideoPlayer { 

    private EmbeddedMediaPlayerComponent mediaPlayerComponent; 
    static String VLCLIBPATH = "C:\\Program Files\\VideoLAN\\VLC"; 

    public MyVideoPlayer(String source) { 
     NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), VLCLIBPATH); 
     Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); 
     JFrame frame = new JFrame("VLC Player"); 
     mediaPlayerComponent = new EmbeddedMediaPlayerComponent(); 
     frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
     frame.setContentPane(mediaPlayerComponent); 
     frame.setSize(1366, 768); 
     frame.setVisible(true); 
     mediaPlayerComponent.getMediaPlayer().playMedia(source); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 
} 

J'appelle ce lecteur vidéo d'un autre cadre par new VideoPlayer(source). Lorsque j'utilise JFrame.DISPOSE_ON_CLOSE, le cadre se ferme mais le son ne continue pas ..

Comment puis-je fermer complètement le cadre du lecteur vidéo?

Répondre

2
  1. Déclarez l'opération près JFrame.DO_NOTHING_ON_CLOSE.
  2. Ajouter un WindowListener comme suit (adapter à votre code au besoin):

    frame.addWindowListener(new WindowAdapter() { 
        @Override 
        public void windowClosing(WindowEvent e) { 
         mediaPlayerComponent.getMediaPlayer().stop(); // Very important! 
         frame.dispose(); 
        } 
    }); 
    

Il sera probablement nécessaire de déclarer frame & mediaPlayerComponent comme final afin d'y accéder à partir d'une classe interne .

+0

Merci, ça a marché –

0

utilisation JFrame.EXIT_ON_CLOSE

i.e. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

La demande de sortie fenêtre par défaut étroite. Si une fenêtre a cet ensemble comme opération de fermeture et est fermée dans une applet, une exception SecurityException peut être levée. Il est recommandé de ne l'utiliser que dans une application.

https://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html#EXIT_ON_CLOSE

Si vous ne souhaitez pas utiliser la sortie à la fermeture qui clôturera l'application puis

Ajouter un Listener sur windowClosing, lorsque l'auditeur appelle la méthode arrêter l'audio

frame.addWindowListener(new WindowAdapter() { 
    @Override 
    public void windowClosing(WindowEvent e) { 
     System.out.println("Closed"); 
     //Here stop the audio 
     e.getWindow().dispose(); 
    } 
}); 
+0

Si j'utilise JFrame.EXIT_ON_CLOSE, tous les cadres se ferment, et je veux seulement fermer l'image du lecteur vidéo –

+0

@PratekKalra Cochez cette case http://stackoverflow.com/a/1944474/2320144 –

+0

DISPOSE_ON_CLOSE à la place de EXIT_ON_CLOSE –