IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Erreurs "FileNotFoundException" avec une URL


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Statistiques et Informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statistiques et Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Je dois réaliser un lecteur audio en langage Java sous Eclipse dans le cadre de mes études. Je suis débutante mais j'ai tout de même réussi à cerner quelques aspects du langage Java et pondre un code...

    J'ai une classe Music dans laquelle je charge la musique depuis une URL, je récupère son format, sa taille, et j'utilise un buffer pour lire la musique.
    J'ai une classe Main où j'appelle la classe Music et je lui indique l'url.
    Mais lorsque je compile, j'obtiens l'erreur suivante :

    java.io.FileNotFoundException: http:/www.youtube.com/watch?v=62XDnzE0FUk (No such file or directory)
    Erreur lors de la lecture...
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at com.sun.media.sound.WaveFileReader.getAudioInputStream(WaveFileReader.java:205)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1162)
    at Music.<init>(Music.java:24)
    at Main.main(Main.java:12)
    Exception in thread "main" java.lang.NullPointerException
    at Music.TailleZikMu(Music.java:55)
    at Main.main(Main.java:15)
    Voici mon code.

    J'ai la classe Music qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.io.*;
    import javax.sound.sampled.*;
     
    public class Music {
        // Champs 
        public String path ; //Chemin internet du fichier qu'on veut lire
        private boolean stop ; // =vrai ou faux, s'arrête quand =vrai
        private AudioFormat format; //format du fichier audio
        private byte[] size; //taille du fichier
        private SourceDataLine line; //ligne pour écrire la musique
     
        // On récupère le chemin d'une musique avec son url
            public void Audio(String path){
                this.path=path;
                stop=false;
                System.out.println("[" + path + "]");
            }
     
            public Music(String path){
                // On ouvre l'url de la musique grâce à un objte inputstream
                try {
                    AudioInputStream music=AudioSystem.getAudioInputStream(new File(path)); 
                    System.out.println("[" + path + "]");
                    format=music.getFormat();
                // On récupère sa taille 
                    size = TailleZik(music);
                // Exception si le format n'est pas supporté
                } catch (UnsupportedAudioFileException e) {
                    e.printStackTrace();
                    System.out.println("Fichier audio non supporté !");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    System.out.println("Erreur lors de la lecture...");
                }
     
            }            
     
            // Méthode pour récupérer le format
            private byte[] TailleZik(AudioInputStream music) {
                // TODO Auto-generated method stub
                return null;
            }
     
            public byte[]getTaille() {
                return size;
            }
     
     
            // Méthode pour récupérer la taille de la musique 
            public byte[] TailleZikMu(AudioInputStream musique){
                    int longueur=(int)(musique.getFrameLength() *format.getFrameSize());
     
                             size = new byte[longueur];
                        DataInputStream is = new DataInputStream(musique);
                       try {
                            is.readFully(size);
                       }
                       catch (IOException ex) {
                             ex.printStackTrace();
                             System.out.println("Erreur : taille du fichier incorrecte !");
                       }
                          return size;
                }
     
            public void lecture(InputStream source ){
                // Mise en mémoire tampon
                int tampompon = format.getFrameSize() *Math.round(format.getSampleRate() / 10);
                byte[]buffer=new byte[tampompon];
     
                // On créée une ligne où on définit le format et le tampon
                try{
                    DataLine.Info info =new DataLine.Info(SourceDataLine.class, format);
                          line = (SourceDataLine)AudioSystem.getLine(info);
                          line.open(format, tampompon);
                }
                 catch (LineUnavailableException ex) {
                     ex.printStackTrace();
                        System.out.println("Erreur lors de la mise en mémoire tampon !");
                     return;
                 }
                         line.start();
     
                 // On copie ensuite sur la ligne pour lire la musique
                 try {
                     int numBytesRead = 0;
                     while (numBytesRead != -1 && !stop) {
                       numBytesRead =source.read(buffer, 0, buffer.length);
                       if (numBytesRead != -1) {
                           line.write(buffer, 0, numBytesRead);
                       }
                    }
                }
                catch (IOException ex) {
                    ex.printStackTrace();
                    System.out.println("Erreur lors de la lecture !");
                }
     
                line.drain();
                line.close();
            }
     
            // Lorsque la copie est finit, on arrête la musique
            public void stop(){
                stop=true;
            }
        }
    Et mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import java.io.*;
     
    public class Main {
        //static ListeMusic listeuh;
     
        public static void main (String [] args)    {
            Music musik = new Music("http://www.youtube.com/watch?v=62XDnzE0FUk");
            InputStream hop = new ByteArrayInputStream(musik.TailleZikMu(null));
            musik.lecture(hop);
     
            System.out.println("On envoie la musique !");
            System.exit(0);
        }
    }
    Est-ce que quelqu'un aurait une idée d'où ça pourrait venir ?

    Merci par avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AudioInputStream music=AudioSystem.getAudioInputStream(new File(path));
    Or ce n'est pas un fichier que tu utilises (fichier = en local), mais une url. Regarde la classe AudioSystem tu as d'autres méthodes getAudioInputStream qui te conviendront mieux

  3. #3
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Bonjour, une "FileNotFoundException" est toujours le même problème, ton code n'arrive pas à trouver le fichier.

    Je te conseille de tester avec un fichier présent sur ton disque dur pour commencer ("c:/monfichier.wav", c'est plus simple), et écrire différentes URL.

    De plus ton url semble être un lien abrégé, et non un URL qui débouche sur quelque chose de réel, je ne sais pas si ça change quelque chose, mais ça peux poser quelques problèmes si ça fait des redirections de serveurs dans tous les sens et que l'extension n'est pas reconnue...
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Statistiques et Informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statistiques et Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Merci pour vos réponses !

    J'ai donc laissé File(path) pour lire une musique depuis mon ordinateur, en modifiant dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Music musik = new Music("/Users/LilyP/Downloads/Beep.wav");
    Mais il m'affiche toujours une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [/Users/LilyP/Downloads/Beep.wav]
    Exception in thread "main" java.lang.NullPointerException
    	at Music.TailleZikMu(Music.java:58)
    	at Main.main(Main.java:12)

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Montre nous ton code actuel, il n'y a pas d'appel à TailleZikMu dans le code que tu nous a montré.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Statistiques et Informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statistiques et Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Voilà mon code pour la classe Music :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    import java.io.*;
    import javax.sound.sampled.*;
     
    public class Music {
    	// Champs 
    	public String path ; //Chemin internet du fichier qu'on veut lire
    	private boolean stop ; // =vrai ou faux, s'arrête quand =vrai
    	private AudioFormat format; //format du fichier audio
    	public byte[] size; //taille du fichier
    	private SourceDataLine line; //ligne pour écrire la musique
    	//private boolean pause ; // =vrai lorsqu'on met en pause
     
    	// On récupère le chemin d'une musique avec son url
    		public void Audio(String path){
    			this.path=path;
    			stop=false;
    			System.out.println("[" + path + "]");
    			//pause=false;
    		}
     
     
    		public Music(String path){
    			// On ouvre l'url de la musique grâce à un objte inputstream
    			try {
    				AudioInputStream music=AudioSystem.getAudioInputStream(new File(path)); 
    				System.out.println("[" + path + "]");
    				format=music.getFormat();
    			// On récupère sa taille 
    				size = TailleZikMu(music);
    			// Exception si le format n'est pas supporté
    			} catch (UnsupportedAudioFileException e) {
    				e.printStackTrace();
    				System.out.println("Fichier audio non supporté !");
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    				System.out.println("Erreur lors de la lecture...");
    			}
     
    		}			
     
    		// Méthode pour récupérer la taille de la musique 
    		 public byte[] TailleZikMu(AudioInputStream music){
    				int longueur=(int)(music.getFrameLength() *format.getFrameSize());
     
    				         size = new byte[longueur];
    				    DataInputStream is = new DataInputStream(music);
    				   try {
    				        is.readFully(size);
    				   }
    				   catch (IOException ex) {
    				         ex.printStackTrace();
    				     	System.out.println("Erreur : taille du fichier incorrecte !");
    				   }
    				      return size;
    			} 
     
    		public void lecture(InputStream source ){
    			// Mise en mémoire tampon
    			int tampompon = format.getFrameSize() *Math.round(format.getSampleRate() / 10);
    			byte[]buffer=new byte[tampompon];
     
    			// On créée une ligne où on définit le format et le tampon
    			try{
    				DataLine.Info info =new DataLine.Info(SourceDataLine.class, format);
    					  line = (SourceDataLine)AudioSystem.getLine(info);
    					  line.open(format, tampompon);
    			}
    			 catch (LineUnavailableException ex) {
    				 ex.printStackTrace();
    					System.out.println("Erreur lors de la mise en mémoire tampon !");
    				 return;
    			 }
    			 		line.start();
     
    			 // On copie ensuite sur la ligne pour lire la musique
    			 try {
    				 int numBytesRead = 0;
    		         while (numBytesRead != -1 && !stop) {
    	               numBytesRead =source.read(buffer, 0, buffer.length);
    	               if (numBytesRead != -1) {
    	            	   line.write(buffer, 0, numBytesRead);
    	               }
    	            }
    	        }
    		    catch (IOException ex) {
    	            ex.printStackTrace();
    	        	System.out.println("Erreur lors de la lecture !");
    		    }
     
    		    line.drain();
    		    line.close();
    		}
     
    		// Lorsque la copie est finit, on arrête la musique
    		public void stop(){
    			stop=true;
    		}
     
    		// public void pause(){
    		//  	pause=true;
    		//      }
     
     
     
    	}
    Et le nouveau code de mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    import java.io.*;
     
    public class Main {
     
    	public static void PlayTheMusic(){
    		System.out.println("Ouvrir et Play");
    		}
    	public static void main (String [] args)	{
     
    		int n;
    		String m;
     
    		System.out.println("Bienvenuuuue ! ");
    		do {
    			System.out.println("Choisissez une action :");
    			System.out.println("1. Ouvrir et lire un fichier audio ");
     
    			n = Lire.i();
     
    			switch (n) {
    				case 1 : //ouvrir le fichier
    					System.out.println("Coller le lien");
    					m = Lire.S();
    					Music musik = new Music(m);
    					InputStream hop = new ByteArrayInputStream(musik.TailleZikMu(null));
    					musik.lecture(hop);
    					System.out.println("On envoie la musique !");
    					break;
    			}
     
    		} while( n != 1);
     
    	System.exit(0);
    }
    	}

    Voici mes erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     [/Users/LilyP/Downloads/Beep.wav]
    Exception in thread "main" java.lang.NullPointerException
    	at Music.TailleZikMu(Music.java:45)
    	at Main.main(Main.java:25)

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Salut,

    Si l'erreur vient bien de cette ligne ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int longueur=(int)(music.getFrameLength() *format.getFrameSize());
    Alors il y'a de fortes chances que music ou format soit null.
    Je dirais format car tu utilise music pour obtenir le format dans l'instruction précédente.

    Vérifie que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format=music.getFormat();
    Ne renvoye pas null sinon tu auras toujours le nullpointerexception.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Statistiques et Informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statistiques et Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Pour le format, je l'ai imprimé dans la console et il m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
    Par contre, dans mon Main, si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream hop = new ByteArrayInputStream(musik.TailleZikMu());
    Cela me met une erreur dans le code et je ne peux donc pas l'exécuter. Eclipse me propose de mettre "...(musik.TailleZikMu(null));", c'est pour ça que je le renvoie à null.

    Du coup, les erreurs qu'ils m'indiquent sont :
    - Dans la classe Music , la ligne
    format=music.getFormat();
    - Dans la classe Main, la ligne
    InputStream hop = new ByteArrayInputStream(musik.TailleZikMu(null));
    que je suis obligé de mettre à null pour compiler...

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Non, tu es obligé de mettre une valeur correcte à ta méthode. Si tu lui passe null puis que t'essaie de tripoter le null, ça va d'office déclencher une exception. Il ne faut pas se contenter de mettre ce que eclipse propose, faut aussi penser à la logique là derrière. Ta méthode TailleZikMu (très mal nommée au passage) s'attends à recevoir un AudioInputStream, alors il faut lui passer un AudioInputStream, et pas null.

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Statistiques et Informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statistiques et Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Merci !
    Effectivement il faut suivre la logique !
    Finalement j'ai mis mon main dans ma classe Music, c'est plus facile pour appeler les méthodes dont j'ai besoin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant] envoi d'un message POST avec une URL
    Par Yannos94 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 14/06/2006, 10h22
  2. [HTTP][Socket] avec une url c'est possible ?
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 19/08/2005, 09h39
  3. [C#] Comment récuper un page xml avec une URL
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/02/2005, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo