Java.lang.OutOfMemoryError

ObiWanKennedy Messages postés 60 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 29 octobre 2010 - 26 févr. 2006 à 11:46
ObiWanKennedy Messages postés 60 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 29 octobre 2010 - 26 févr. 2006 à 22:15
Bonjour, je travaille sur une application de gestion de playliste winamp donc voici ma fonction qui crée un fichier html avec divers renseignement.

public void creehtml(boolean allormissed)//true on affiche tous les fichier de la playliste et false on affiche que les fichiers manquants
{
boolean mp3;
if(allormissed)//on affiche tout.
{
try{
BufferedWriter fW= new BufferedWriter(new FileWriter("PlaylisteAll.html",true));

fW.write("<center>Voici une exportation de votre playList en Html</center>"+"\r\n");
fW.write("

");
fW.write("<table><tr><td>nom du fichier</td><td>chemin</td><td>Groupe</td><td>Titre</td><td>Statut</td></tr>");
String artistetemp=null,titretemp=null;
for(int i=0;i<file.size();i++)
{
mp3=false;


try
{
if((Vfichier.elementAt(i).toString().contains(".mp3"))&&(Existe.elementAt(i).toString().equals("oui")))
{
try//création d'un objet MP3File tampon je recupère les info que je désire et je passe mon temp à null et je vide "les dechets"
{
MP3File temp = new MP3File(Vfichier.elementAt(i).toString());
mp3=true;
artistetemp = temp.getArtist().getTextContent();
titretemp = temp.getTitle().getTextContent();
temp=null;
Runtime.getRuntime().gc();


}
catch(Exception e)
{
System.out.println(e.toString());
}

}
//j'affiche divers information comme le chemin et le nom du fichier son
fW.write("<tr><td>");
fW.write(file.elementAt(i).toString());
fW.write("</td><td>");
int longueur = Vfichier.elementAt(i).toString().length()-file.elementAt(i).toString().length();
String temp2 = Vfichier.elementAt(i).toString().substring(0,longueur);
fW.write(temp2);
fW.write("</td><td>");
if(mp3)//si c'est un mp3 alors j'ecris les information issue du ID3v2 dans ma pages html
{



if(artistetemp!=null)
fW.write(artistetemp);//nom de l'artiste
else
fW.write("&nbsp");

fW.write("</td><td>");


if(artistetemp!=null)
fW.write(titretemp);
else
fW.write("&nbsp");

}
else //si c'est pas des mp3 j'ecris des espaces
{
fW.write("&nbsp");
fW.write("</td><td>");
fW.write("&nbsp");

}
artistetemp=null;//je passe mes chaines de caractrères a null.
titretemp=null;


fW.write("</td><td>");
if(Existe.elementAt(i).toString().equals("oui"))
{
fW.write("Présent"+"\r\n");
}
else
{
fW.write("Indisponible"+"\r\n");
}
}
catch(Exception e)
{
//System.out.println(ligne+" 1");
System.out.println(e.toString());
System.gc();//si une exception est reçu ici on vide les dechets.
}
}
fW.close();
}
catch(IOException e)
{
//System.out.println(ligne+" 1");
System.out.println(e.toString());
}


}
else//cette partie fonctionne tres bien.
{
try{

BufferedWriter fW= new BufferedWriter(new FileWriter("PlaylisteIndispo.html",true));
fW.write("<center>Voici liste des fichiers qui n'existe plus sur votre disque</center>"+"\r\n");
fW.write("

");
fW.write("

");
fW.write("<table><tr><td>nom du fichier</td><td>chemin</td></tr>");
for(int i=0;i<file.size();i++)
{



if(Existe.elementAt(i).toString().equals("oui"))
{

}
else
{
System.out.println(file.elementAt(i).toString());
fW.write("<tr><td>");
fW.write(file.elementAt(i).toString());
fW.write("</td><td>");
int longueur = Vfichier.elementAt(i).toString().length()-file.elementAt(i).toString().length();
String temp2 = Vfichier.elementAt(i).toString().substring(0,longueur);
fW.write(temp2);
fW.write("</td></tr>");
}
}
fW.close();
}
catch(Exception e)
{

System.out.println(e.toString());
}


}

}

j'ai utilisée une librairy: http://www.vdheide.de/projects.html pour les classes MP3File et j'ai écris à l'auteur mais l'email n'est pas arrivé.
j'ai lu sur divers forum que cette erreur était un dépassement de la capacité mémoire de la JVM. J'ai vu diverses solutions comme l'option -Xmx250m pour augmenter l'espace mémoire de la JVM cela ne fonctionne pas et le garbage collector ne m'aide pas plus.

pour info: ma playliste contient 14 110 fichier de musique et celà plante vers le 1 300ème.

voila merci.

10 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 févr. 2006 à 12:17
tu n'aurais pas la ligne ou se declenche le probleme par hasard ?
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
26 févr. 2006 à 12:50
J'ai aps lu le code dans le détail, mais si tu stockes tous tes fichiers MP3 via des objets, c'est pas étonnant que ça plante^^

gmi19oj19
0
ObiWanKennedy Messages postés 60 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 29 octobre 2010 1
26 févr. 2006 à 13:12
non mais quand je mets ces lignes en commentaires:

MP3File temp = new MP3File(Vfichier.elementAt(i).toString());
mp3=true;
artistetemp = temp.getArtist().getTextContent();
titretemp = temp.getTitle().getTextContent();
temp=null;

cela marche bien mais je n'ai pas toutes les infos que je désire.
a oui, l'erreur exacte est java.lang.OutOfMemoryError : java heap space.

il serait logique que ce soit cette ligne.
MP3File temp = new MP3File(Vfichier.elementAt(i).toString());
la nouvelle allocation ne peut pas ce faire car il y a plus de mémpoire disponible.
0
ObiWanKennedy Messages postés 60 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 29 octobre 2010 1
26 févr. 2006 à 13:32
Ben non justement je stocke pas tous les mp3 dans des objets enfin du moins je ne veux pas faire ça mais c'est se qui a l'air de faire. Normalement je crée un objet je prends ce qui m'interesse et je le détruit mais la destruction ne se fait pas on dirait.
Normalement, je ne dois avoir qu'un seul objet MP3File en mémoire au maximun.
mais apparament je dirais qu'il y a une memory lack c-a-d que il me crée un objet et au lieu de le détruire et de recréer un objet au même endroit ben il en crée un autre. Mais je comprends pas pourquoi il fait.
voila.

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 févr. 2006 à 16:09
au lien de fait System.out.println(e.toString()); essaie de faire e.printStackTrace et on sauras ou se produit ou plutot quand ce produit l'exception

sinon moi je m'etais fait un petit prog qui me lister tout mes mp3 (2000) il ne planté pas je stocker des objets file dans un vector tout se passe tres bien
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 févr. 2006 à 17:51
joubliais apres j'ecrivais le vector dans un fichier textes je pense qu'il ny a pas grand chose a modifer pour en faire un html si tu veut le code je te le passerai par mail
0
ObiWanKennedy Messages postés 60 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 29 octobre 2010 1
26 févr. 2006 à 18:25
j'ai fait
catch(OutOfMemoryError e)
{
e.printStackTrace();
}
et en faite l'application continue je ne comprends pas mais sa n'affiche pas la date.
donc maintenant j'ai bien ma liste avec tout mes mp3 mais l'erreur revient plusieur fois durant l'execution.
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 févr. 2006 à 19:06
un peu bizarre je me renseigne un peu sur le package et tout a la limite j'essai ton code et essai de le corriger mais je ne garantie rien !!

mais dasn le tableau que tu liste pour les mp3 il n'y a que des fichier mp3 ? ou il y a d'autre type de fichier ?
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 févr. 2006 à 20:10
je veins de faire un code ou plutot modifier un code que j'avais fait permettant de lister les mp3 de mon pc ensuite d'apres un Vector il recupere tous les mp3 lister en fait des MP3File et ecrit dans un fichier texte qq info
j'avou que j'ai une frame exception que j'essai de resoudre
0
ObiWanKennedy Messages postés 60 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 29 octobre 2010 1
26 févr. 2006 à 22:15
enfait dans ma playlist j'ai tout mes fichiers son mais je n'applique le traitrement que si la chaine contient un .mp3 et si le fichier existe

if((Vfichier.elementAt(i).toString().contains(".mp3"))&&(Existe.elementAt(i).toString().equals("oui")))

apparament la librairie n'aime pas certains mp3 j'ai des divisions par 0 pour certains mp3.
j'ai ajouté une vérification. Et moi aussi j'au des erreurs de frame avec certains fichiers
si tu trouves je veux bien.
0
Rejoignez-nous