2015-10-29 1 views
0

J'ai un peu de mal avec les JPanels imbriqués en train de jouer une vidéo. J'ai une classe AVPlayer étendre JPanel qui joue jusqu'à 4 vidéos simultanément. Chaque vidéo est jouée dans sa propre toile qui est dans son propre JPanel. Tous les panneaux sont ensuite placés dans le panneau AVPlayer. Mais quand j'essaie de lire les vidéos, tout ce que je reçois est un carré noir. Je ne suis pas sûr de ce que le problème réel dans mon programme plus grand est, mais je pense que je peux le résoudre si je peux obtenir les vidéos à jouer en utilisant le deuxième bit de code ci-dessous. Quelqu'un peut-il me dire pourquoi le premier morceau de code est correctement capable d'afficher toutes les vidéos, mais le second ne l'est pas.vlcj écran noir lors de la lecture vidéo

Code qui fonctionne:

JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 

    AVPlayer player = new AVPlayer(); 
    frame.getContentPane().add(player); 
    frame.revalidate(); 
    String[] path = {"(ei)ga_00.mp4", "ei-utsu(ru)_00.mp4", "video.mp4"}; 
    player.playVideo(path); 

code qui montre un petit carré noir

JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 

    AVPlayer player = new AVPlayer(); 

    JPanel panel = new JPanel();   
    panel.add(player); 

    frame.getContentPane().add(panel); 
    frame.revalidate(); 
    String[] path = {"(ei)ga_00.mp4", "ei-utsu(ru)_00.mp4", "video.mp4"}; 
    player.playVideo(path); 
+0

Modifier 'JPanel panel = new JPanel(); '' 'JPanel panel = new JPanel (new BorderLayout());' – MadProgrammer

Répondre

1

changement JPanel panel = new JPanel(); à JPanel panel = new JPanel(new BorderLayout());

Votre AVPlayer devrait également remplacer la méthode getPreferredSize de JPanel et retourner le "taille préférée" du composant, de cette façon la mise en page m GESTIONNAIRES ont peu d'espoir de réellement pu y faire des emplois

Affichez Laying Out Components Within a Container pour plus de détails

Beware surface vidéo principale de cette vlcj est une composante de poids lourds et de les mélanger sur les contenants de poids léger peut générer des effets indésirables

+0

Je remplace la méthode getPreferredSize pour AVPlayer. La classe AVPlayer elle-même a 4 panneaux avec une bordure et 4 canevas ajoutés à chacun de ces panneaux. J'ai changé la disposition AVPlayer à GridLayout et maintenant tout fonctionne bien. Il est trop tard pour éviter le mélange des composants. Je ne savais pas que c'était une chose jusqu'à ce que je sois bien dans mon programme. C'était le dernier problème auquel je faisais face et comme il est résolu, je vais boucler ce petit projet. Je vais penser aux composants légers et lourds pour la prochaine fois. Merci beaucoup pour l'aide. J'avais été à ce problème pendant plusieurs heures. – Aeleon

+0

Mélanger des composants lourds et légers n'est pas un gros problème, franchement. Bien sûr, vous devez connaître les problèmes potentiels, mais en pratique, cela n'a pas d'importance. – caprica

+0

@caprica Votre pratique diffère évidemment de la mienne, je n'ai pas eu de problèmes de z-order câblés et de problèmes de peinture quand ils sont mélangés, même si c'est supposé avoir été corrigé – MadProgrammer