[JMF] Soucis avec GainControl
Hello,
J'essaie de faire un player simple mais je m'arrache les cheveux vace GainControl. Je lis de partout qu'il faut que je sois a l'état Realized pour récupérer le GainControl.
Mais impossible de le faire marcher.
Voici mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| package lecteur;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.IOException;
import javax.media.CannotRealizeException;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.RealizeCompleteEvent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
public class MainWindows extends JFrame implements ControllerListener
{
private Player audioPlayer = null ;
private File fichier = null ;
private Container content = null ;
//Constructeur
public MainWindows() throws IOException,NoPlayerException, CannotRealizeException
{
//Initialisation de la fenêtre
this.setTitle("Mon player");
this.setSize(300, 150);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
//Récupération du contentPane
content = this.getContentPane() ;
content.setLayout(new BorderLayout()) ;
//Récupération d'un fichier
fichier = this.openAFile() ;
//Création du player
audioPlayer = Manager.createPlayer(fichier.toURI().toURL());
audioPlayer.addControllerListener(this);
this.setVisible(true);
}
public void play()
{
audioPlayer.start();
}
public void stop()
{
audioPlayer.stop();
audioPlayer.close();
}
// Ouvrir fichier
public File openAFile()
{
JFileChooser choixFichier = new JFileChooser();
choixFichier.setFileSelectionMode(JFileChooser.FILES_ONLY );
// Ouvre explorer, retourne sous forme dentier la selection
int resultat = choixFichier.showOpenDialog( this );
// Utilisateur clique sur le bouton Annuler dans le dialogue.
if ( resultat == JFileChooser.CANCEL_OPTION )
fichier = null;
else
fichier = choixFichier.getSelectedFile();
return fichier;
}
public static void main(String[] args)
{
try
{
MainWindows test = new MainWindows() ;
test.play() ;
}
catch (NoPlayerException e)
{
e.printStackTrace();
}
catch (CannotRealizeException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public synchronized void controllerUpdate(ControllerEvent event)
{
if(audioPlayer != null)
{
if (event instanceof RealizeCompleteEvent)
{
Component controlPanel = null;
Component gainControl = null ;
if((controlPanel = audioPlayer.getControlPanelComponent()) != null)
content.add (controlPanel, BorderLayout.CENTER);
if((gainControl = audioPlayer.getGainControl().getControlComponent()) != null)
content.add (gainControl, BorderLayout.SOUTH);
content.validate();
}
}
}
} |
Il lance la chanson, il créé le player, mais IMPOSSIBLE d'afficher le GainControl (il me retourne null si j'fais le test).
Je ne trouve pas de réponse pour résoudre mon problème.
Et surtout quand je fais audioPlayer.getState() dans la fonction if (event instanceof RealizeCompleteEvent) il me retourne la valeur 400 qui correspond a Prefechted State et non pas Realize.
Bref, je suis en train de fumer la, une âme charitable pourrait-elle m'aider svp ? :)
Cordialement,
Shad.