Pb mon lecteur Video bouffe toutes mes ressources

cs_nomad56 Messages postés 54 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 avril 2006 - 13 févr. 2006 à 02:41
cs_nomad56 Messages postés 54 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 avril 2006 - 13 févr. 2006 à 22:33
salut,

j'ai piqué du code un peu partout sur ce site pour coder mon petit player.

Il marche super bien (relativement) sauf que il reste un PB :

certaines fois quand je clique sur ouvrir, il fait ramer le PC prenant 100% des ressources de l'UC (suis sous XP)



là je bloque car c pas toujours k'il le fait....



déjà ca et puis un bonus, je suis obligé de mettre le JMenuItem itemOuvrir direct dans la JMenuBar car si je fait passer par un

JMenu menuFichier (pour faire fichier/ouvrir) , l'item itemOuvrir est
cachée derrière la video actuelle... donc si kk pouvait m'arranger ces
2 pitis pb, ce serait parfait :)



bonne chance.



PS : je pense que pour ceux qui se lancerai dans le codage en
multimédia (utilisation de JMF), prendre exemple sur mon code serait
pas mal comme début .. voila voila et merci d'avance.



CODE :



import javax.media.*;

import javax.swing.*;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

import javax.swing.filechooser.FileFilter;



import java.awt.*;

import java.awt.event.*;



import java.io.*;



public class MedPlayer extends JFrame implements ControllerListener,ActionListener, MouseListener, ChangeListener

{

private JMenuBar menuBar=null;

private JMenu menuFichier=null;

private JMenuItem itemOuvrir=null;

private JFileChooser jfc=null;

private JPanel panelControl=null;

private JPanel panelVideo=null;



private Player player=null;

private JSlider sliderTimer=null;

private File file=null;



private JButton buttonPlay=null;

private JButton buttonStop;

private JButton buttonPause;

private JButton buttonDebut;

private JButton buttonFin;

//private JButton buttonNoneDebut;

//private JButton buttonNoneFin;

private JLabel labelNoneDebut;

private JLabel labelNoneFin;

private SliderManager sm=null;



private boolean stopForced;



public MedPlayer() throws HeadlessException

{

super();

try {

this.initialise();



} catch (Exception e) {

System.out.println("Erreur de construction:"+e.getMessage());

}



}

public MedPlayer(String p_filename) throws HeadlessException

{

super();

try {

this.initialise();

this.loadMovie(p_filename);

} catch (Exception e) {

System.out.println("Erreur de construction:"+e.getMessage());

}



}



private void initialise()

{



implementAll();

//menuFichier.add(itemOuvrir);

menuBar.add(itemOuvrir);

this.setJMenuBar(menuBar);



buttonDebut.setRolloverIcon(new ImageIcon("./skin/buttonDebutPlayerOver.JPG"));

buttonStop.setRolloverIcon(new ImageIcon("./skin/buttonStopPlayerOver.JPG"));

buttonPause.setRolloverIcon(new ImageIcon("./skin/buttonPausePlayerOver.JPG"));

buttonPlay.setRolloverIcon(new ImageIcon("./skin/buttonPlayPlayerOver.JPG"));

buttonFin.setRolloverIcon(new ImageIcon("./skin/buttonFinPlayerOver.JPG"));







buttonDebut.setBorderPainted(false);

buttonDebut.setContentAreaFilled(false);

buttonDebut.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 0, true));



buttonStop.setBorderPainted(false);

buttonStop.setContentAreaFilled(false);

buttonStop.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 0, true));



buttonPause.setBorderPainted(false);

buttonPause.setContentAreaFilled(false);

buttonPause.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 0, true));



buttonPlay.setBorderPainted(false);

buttonPlay.setContentAreaFilled(false);

buttonPlay.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 0, true));



buttonFin.setBorderPainted(false);

buttonFin.setContentAreaFilled(false);

buttonFin.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 0, true));



/*buttonNoneDebut.setBorderPainted(false);

buttonNoneDebut.setContentAreaFilled(false);

buttonNoneDebut.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));



buttonNoneFin.setBorderPainted(false);

buttonNoneFin.setContentAreaFilled(false);

buttonNoneFin.setBorder(new
javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));

*/





itemOuvrir.addActionListener(this);

buttonPlay.addActionListener(this);

buttonStop.addActionListener(this);

buttonPause.addActionListener(this);

buttonDebut.addActionListener(this);

buttonFin.addActionListener(this);

//buttonNextSecond.addActionListener(this);

//buttonRalentit.addActionListener(this);



menuFichier.addMouseListener(this);

//sliderTimer.addChangeListener(this);

sliderTimer.addMouseListener(this);







this.getContentPane().setLayout(new BorderLayout());



panelVideo.setLayout(new BorderLayout());

panelVideo.setBackground(Color.BLACK);



panelControl.setLayout(new GridBagLayout());



sliderTimer.setBackground(Color.BLACK);



labelNoneDebut.setBackground(Color.BLACK);



panelControl.add(sliderTimer,new Gbc(0,0,Gbc.REMAINDER,1,9,0));

//panelControl.add(sliderTimer);

//panelControl.add(buttonNoneDebut,new Gbc(0,1,1,1,9,0));

panelControl.add(new JLabel(new ImageIcon()),new Gbc(0,1,1,1,9,0));



panelControl.add(labelNoneDebut,new Gbc(1,1,1,1));



panelControl.add(buttonDebut,new Gbc(2,1,1,1));

panelControl.add(buttonStop,new Gbc(3,1,1,1));

panelControl.add(buttonPause,new Gbc(4,1,1,1));

panelControl.add(buttonPlay,new Gbc(5,1,1,1));

//panelControl.add(buttonNextSecond,new Gbc(4,1,1,1));

panelControl.add(buttonFin,new Gbc(6,1,1,1));

//panelControl.add(buttonNoneFin,new Gbc(6,1,1,1,9,0));

panelControl.add(labelNoneFin,new Gbc(7,1,1,1));

//panelControl.add(p.getJLabel(),new Gbc(6,1,1,1,9,0));

panelControl.add(new JLabel(new ImageIcon()),new Gbc(8,1,1,1,9,0));

//panelControl.add(buttonRalentit,new Gbc(6,1,1,1));

panelControl.setBackground(Color.BLACK);







this.getContentPane().add(panelVideo,BorderLayout.CENTER);

this.getContentPane().add(panelControl,BorderLayout.SOUTH);









this.setTitle("MedPlayer");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(320,200);

this.setVisible(true);



this.pack();

}



private void implementAll()

{

menuBar = new JMenuBar();

menuFichier = new JMenu("Fichier");

itemOuvrir = new JMenuItem("Ouvrir");

panelControl = new JPanel();

panelVideo = new JPanel();

sliderTimer = new JSlider(JSlider.HORIZONTAL,0, 100, 0);

jfc = new JFileChooser();

buttonPlay = new JButton(new ImageIcon("./skin/buttonPlayPlayer.JPG"));

buttonStop = new JButton(new ImageIcon("./skin/buttonStopPlayer.JPG"));

buttonPause = new JButton(new ImageIcon("./skin/buttonPausePlayer.JPG"));

buttonDebut = new JButton(new ImageIcon("./skin/buttonDebutPlayer.JPG"));

buttonFin = new JButton(new ImageIcon("./skin/buttonFinPlayer.JPG"));

//buttonNoneDebut = new
JButton(new ImageIcon("D:\\travaux\\projet professionnel 5I\\maquettes
de prédéveloppement\\images\\divers\\buttonNeantPlayer.JPG"));

//buttonNoneFin = new JButton(new
ImageIcon("D:\\travaux\\projet professionnel 5I\\maquettes de
prédéveloppement\\images\\divers\\buttonNeantPlayer.JPG"));

labelNoneDebut = new JLabel(new ImageIcon("./skin/buttonNeantPlayerStart.JPG"));

labelNoneFin = new JLabel(new ImageIcon("./skin/buttonNeantPlayerEnd.JPG"));





//p = new
Picture("D:\\travaux\\projet professionnel 5I\\maquettes de
prédéveloppement\\images\\divers\\buttonNeantPlayer.JPG");

//buttonNextSecond = new JButton("Next");

//buttonRalentit = new JButton("Ral");















}



public void controllerUpdate(ControllerEvent ce)

{

/*if( ce.getSource() == player )

{

//if(player.Started == Player.Started)

{

double pourcent;


pourcent = (player.getMediaTime().getSeconds() *
100) / player.getDuration().getSeconds();

System.out.println("- "+pourcent);



}

}*/

if ( ce instanceof RealizeCompleteEvent )

{



panelVideo.removeAll();

panelVideo.add( player.getVisualComponent(), BorderLayout.CENTER);

//panelVideo.add(player.getControlPanelComponent(),BorderLayout.SOUTH);

panelVideo.setVisible(true);

this.pack(); // resize the size according to the size of film

}

}



public void actionPerformed(ActionEvent e)

{

try {





if(e.getSource() == itemOuvrir)

{

buttonStop.doClick();

jfc.setCurrentDirectory(new File("."));

if(jfc.showOpenDialog(this) == jfc.APPROVE_OPTION)

{

file = jfc.getSelectedFile();

this.loadMovie(file.getPath());



}



}

if(e.getSource() == buttonPlay)

{

//System.out.println("Playing movie...");



player.start();

}

if(e.getSource() == buttonStop)

{

//System.out.println("Stop movie...");

player.stop();

player.deallocate();

player.setMediaTime(new Time(0));

this.stopForced = true;

}

if(e.getSource() == buttonPause)

{

//System.out.println("Stop movie...");

player.stop();





}

if(e.getSource() == buttonDebut)

{

//System.out.println("Stop movie...");



player.stop();

player.deallocate();

player.setMediaTime(new Time(0));

player.start();





}

if(e.getSource() == buttonFin)

{

//System.out.println("Stop movie...");



Time duration = player.getDuration();



//System.out.println("duration:"+duration.getSeconds());

player.stop();

//player.deallocate();


//Time miDuration = new
Time(duration.getSeconds()/2);



//System.out.println("duration:"+miDuration.getSeconds());


player.setMediaTime(new Time(duration.getSeconds()));

//player.start();





}

/*if(e.getSource() == buttonNextSecond)

{



player.stop();


player.setStopTime(new
Time(player.getMediaTime().getSeconds()+1));

player.stop();

player.start();



}*/

/*if(e.getSource() == buttonRalentit)

{

this.stopForced = false;




while(player.getMediaTime().getSeconds() <
player.getDuration().getSeconds() && !this.stopForced)

{

player.stop();


player.setStopTime(new
Time(player.getMediaTime().getSeconds()+1));

player.stop();

player.start();

}





}*/

} catch (Exception ex) {

// TODO Auto-generated catch block


System.out.println("Exception généré dans
actionPerformed:"+ex.getMessage());

}



}



private void loadMovie(String p_path)

{

// TODO Auto-generated method stub



if ( p_path.indexOf( ":" ) < 3 ) p_path = "file:" + p_path;

System.out.println("fichier ="+p_path);

try

{



//panelVideo.add(player.getVisualComponent(),BorderLayout.CENTER);

if(sm!=null)

{

sm.stopIt();

}



sm = null;

player = Manager.createPlayer(new MediaLocator(p_path));

player.addControllerListener(this);





player.realize();



sm = new SliderManager(player,sliderTimer);

sm.start();

}



catch (Exception ex)

{


System.out.println("Erreur de creation de player: "+ex.getMessage()+"
\nlocalized:"+ex.getLocalizedMessage()+"\n cause:"+ex.getCause());

return;

}



sliderTimer.setSize(this.getSize());





}







/**

* @param args

*/

public static void main(String[] args)

{

/*// TODO Auto-generated method stub

//Introduction introduction = new Introduction();

//MedPlayer medPlayer = new MedPlayer();

Picture pic = new Picture("./whitetiger1024.jpg");

pic.show();





for (int i = 0; i < pic.width()/2; i++)

{

for (int j = 0; j < pic.height(); j++)

{

//pic.setColor(i,j,Color.YELLOW);



pic.setGray(i,j,(pic.getGray(i,j)/2));

}

}

pic.show();

int confirm = JOptionPane.showConfirmDialog(null,"Enregistrer le résultat?");

if(confirm == JOptionPane.OK_OPTION)

{

pic.save("./modifiedWhiteTiger.jpg");

}

*/



/*ModifImage mi = new ModifImage("./whitetiger1024.jpg");

*/

//MedPlayer medPlayer = new
MedPlayer("D:\\travaux\\projet professionnel
5I\\Eclipse_workspace8\\MedPlayer\\sample.mov");

MedPlayer medPlayer = new MedPlayer();





}







public void mouseClicked(MouseEvent e) {

if(e.getSource() == menuFichier)

{

//this.getContentPane().remove(panelVideo);

//panelVideo.setVisible(false);

this.setComponentZOrder(menuFichier,1);

this.setComponentZOrder(itemOuvrir,1);



}

}



public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==sliderTimer)

{

//sm.stopIt();

sliderTimer.addChangeListener(this);

}



}



public void mouseReleased(MouseEvent e)

{

// TODO Auto-generated method stub

if(e.getSource()==sliderTimer)

{

sliderTimer.removeChangeListener(this);

//sm.reset();

}

}



public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

if(e.getSource() == buttonPlay)

{



}







}



public void mouseExited(MouseEvent e) {





}



public void stateChanged(ChangeEvent e) {

// TODO Auto-generated method stub

if(e.getSource() == sliderTimer)

{

if(!sliderTimer.getValueIsAdjusting())

{

int pourcent = sliderTimer.getValue();

this.setMoviePosition(pourcent);

}

}



}



private void setMoviePosition(int pourcent) {

// TODO Auto-generated method stub

Time duration = player.getDuration();

//player.stop();

//System.out.println("duration:"+duration.getSeconds()+"pourcent:"+pourcent);



player.setMediaTime(new Time(duration.getSeconds() * ((double)pourcent/100)));

//System.out.println("formula:"+(duration.getSeconds() * ((double)pourcent/100)));



//System.out.println("moviePosition:"+player.getMediaTime().getSeconds());

}



private class Gbc extends GridBagConstraints

{

public Gbc()

{

super();

//c.fill = GridBagConstraints.BOTH;

this.fill = GridBagConstraints.BOTH;

}

public Gbc(int p_gridx, int p_gridy, int p_gridwidth,int p_gridheight)

{

super();

//this.fill = GridBagConstraints.BOTH;

this.gridx=p_gridx;

this.gridy=p_gridy;

this.gridwidth=p_gridwidth;

this.gridheight=p_gridheight;

}

public Gbc(int p_gridx, int
p_gridy, int p_gridwidth,int p_gridheight, int p_weightx,int p_weighty)

{

super();

this.fill = GridBagConstraints.BOTH;

this.gridx=p_gridx;

this.gridy=p_gridy;

this.gridwidth=p_gridwidth;

this.gridheight=p_gridheight;

this.weightx = p_weightx;

this.weighty = p_weighty;



}

}



private class SliderManager extends Thread implements ChangeListener

{

Player player=null;

JSlider slider=null;

boolean stopIt=false;

public SliderManager(Player p_player, JSlider p_slider)

{

super();

this.player = p_player;

this.slider = p_slider;

}



public void stopIt() {

// TODO Auto-generated method stub

this.stopIt=true;

}



public void run()

{

while (!stopIt) {

try

{


slider.removeChangeListener(this);



//slider.setValue((int)(player.getMediaTime().getSeconds()));



slider.setValue((int)Math.round(((player.getMediaTime().getSeconds()) *
100) / (player.getDuration().getSeconds())));

slider.addChangeListener(this);

Thread.sleep(1000);

}

//catch (InterruptedException e)

catch (Exception e)

{


System.out.println("Erreur de
run() dans le thread SliderManager");

break;

}

}

}

public void reset()

{

this.stopIt=false;

this.run();



}



public void stateChanged(ChangeEvent arg0)

{

Time duration = player.getDuration();

int pourcent = slider.getValue();


player.setMediaTime(new Time(duration.getSeconds() *
((double)pourcent/100)));



}



}









}// fin de class MedPlayer

4 réponses

cs_nomad56 Messages postés 54 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 avril 2006 1
13 févr. 2006 à 03:12
pour avoir tout le code source de l'appli :



http://www.javafr.com/code.aspx?ID=36018
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
13 févr. 2006 à 09:41
Merci de ne pas mettre de code bugué la prochaine fois ;-) et surtout
préparer un minimum la source : mettre des commentaires, structuré le
fichier correctement (convention syntaxique SUN par ex) et dans la
moindre mesure : aucuns bugs ! D'ailleurs si tu peux la mettre à jour ;-)

Bon courage pour résoudre tes problèmes :p



++
0
Gwillherm Messages postés 24 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 22 février 2006
13 févr. 2006 à 10:07
... en mode debug tu n'as pas moyen de trouver la ligne (ou les enchainements de code) qui déclenche(ent) ton problème ???

Gwillherm
0
cs_nomad56 Messages postés 54 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 avril 2006 1
13 févr. 2006 à 22:33
oui effectivement, l'indentation et les lignes passées en commentaire
ainsi que l'abscence de commentaires explicatifs font que la source est
difficilement lisible. désolé pour ca.





sinon pour le debug, je vois pas trop le truc ...
0
Rejoignez-nous