Erreur "OutOfMemoryError: Java heap space"
Bonsoir,
Je rencontre cette erreur ci:
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
|
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3039)
at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3060)
at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3250)
at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1822)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXMLNS(PiccoloLexer.java:1293)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXML(PiccoloLexer.java:1261)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4808)
at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290)
at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400)
at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714)
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:142)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:134)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:235)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:190)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:182)
at Extraction2.main(Extraction2.java:138) |
Lorsque j'execute mon programme (l'erreur provient de la ligne rouge):
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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
//But: écrire dans le fichier 'Quimper2_AS_OE_1erT_2012.xlsx' et récupérer pour chaque feuille de semaine (ex:'S04') les agents avec leur heures effectués.
//
System.out.println("----> on extrait les prénoms des agents avec leur heures effectués dans la semaine pour chaque prenom égale dans la colonne correspondante à la semaine travaillé.");
String prenom_recup = null;
String prenom_agent = null;
String semaineQuimper;
int semaineQ[][] = new int[100][100];
InputStream ist = new FileInputStream("C:/Donnees/Aide_Manager/Quimper2_AS_OE_2012.xlsx");
OPCPackage opc=OPCPackage.open(ist);
XSSFWorkbook wb2= new XSSFWorkbook(opc);
XSSFSheet sheet2 = (XSSFSheet)wb2.getSheet("heures");
XSSFRow row2 = null;
XSSFCell cell2 = null;
//pour ouvrir un .xlsx
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
evaluator.evaluate(cell2);
XSSFCellStyle cellStyle = null;
XSSFDataFormat fmt = wb2.createDataFormat(); //version .xlsx
//on récupère toutes les semaines trouvée ds le fichier 'Quimper...' de la ligne 1 colonne par colonne
//lis toutes les colonnes de la ligne 1(ou se trouve les semaines)
System.out.println("-> on récupère toutes les semaines trouvée ds le fichier 'Quimper...' de la ligne 1 colonne par colonne.");
for(int i=2;i<=66;i++){//jusqu'au totaux de décembre
row2 = sheet2.getRow(1);//récupère la ligne 1
semaineQuimper = row2.getCell(i).getStringCellValue();// récupère la chaine de la colonne en cours
if(semaineQuimper.startsWith("S") && !semaineQuimper.equals("Septembre")){//si ca commence par s et ne commence pas par Septembre
semaineQ[0][k]=Integer.parseInt(semaineQuimper.substring(1));//on récupère la semaine
semaineQ[1][k]=row2.getCell(i).getColumnIndex();//et aussi la colonne ou elle est présente dans le fichier
System.out.println("semaineQ: "+semaineQ[0][k]+" à la colonne: "+semaineQ[1][k]);
}
k++;
}
System.out.println("");
System.out.println("## Récupération des prénoms seulement + la ligne où il se trouve dans le fichier 'Quimper2...'. ##");
int g = 0;//compteur pour le tableau
for(int i=2;i<=17;i++){
row2 = sheet2.getRow(i);
cell2 = row2.getCell(1);
Agent a = new Agent();
if(cell2 != null){
prenom_agent=row2.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
String[] prenom=prenom_agent.split(" ");
int ligne_prenom;
if(prenom.length==2){//ex: [nom]espace[prenom]
prenom_recup=prenom[1];//recup du prénom
ligne_prenom= row2.getRowNum();// récup de la ligne (pour écrire l'heure dans la bonne colonne)
a.setAgent(prenom_recup);
a.setNum_ligne_agent(ligne_prenom);//recup de la ligne ou il est ds la fichier final
//System.out.println("sans un espace ds le nom: "+prenom_recup+" ligne_du_nom: "+ligne_prenom);
listAgent.add(a);
tabPrenomQ[0][g]=prenom_recup;
System.out.println("Avec Nom seul: "+tabPrenomQ[0][g]+"index: "+g);
tabPrenomQ[1][g]=String.valueOf(ligne_prenom);
g++;
}
if(prenom.length==3){//ex: [nom]espace[nom]espace[prenom]
prenom_recup=prenom[2];
ligne_prenom= row2.getRowNum();// récupération de la ligne
a.setAgent(prenom_recup);
a.setNum_ligne_agent(ligne_prenom);
//System.out.println("avec un espace ds le nom: "+prenom_recup+" ligne_du_nom: "+ligne_prenom);
listAgent.add(a);
tabPrenomQ[0][g]=prenom_recup;
System.out.println("Avec un Nom composé de 2 mots: "+tabPrenomQ[0][g]+"index: "+g);
tabPrenomQ[1][g]=String.valueOf(ligne_prenom);
g++;
}
}
}
System.out.println("");
System.out.println("Liste des prénoms du fichier Quimper.xlsx");
//pour voir tous les prénoms de mon tableau récupérer de Quimper
for (int d=0; d<tabPrenomQ.length;d++){
if(tabPrenomQ[0][d] != null || tabPrenomQ[1][d]!=null){//si l'une des cellules n'est pas null
//afficher l'agent + la validation
System.out.println("Prénom: "+tabPrenomQ[0][d]+" se trouvant à la ligne: "+tabPrenomQ[1][d]);
}
}
System.out.println("");
System.out.println("Prénom par semaine de Projection.xlsx");
//pour voir tous les prénoms de mon tableau récupérer de Quimper
for (int d=0; d<tabPrenomP.length;d++){
if(tabPrenomP[0][d] != null ){//si l'une des cellules n'est pas null
//afficher l'agent + la validation
System.out.println("Semaine: "+semaineP[1][d]+"Prénom: "+tabPrenomP[0][d]);
}
}
//^^^^^^^^^^^^^^
System.out.println("");
System.out.println("*******************SEMAINE 1*********************");
int nbPrenomsP = tabPrenomP.length;
int nbPrenomsQ = tabPrenomQ.length;
//pour ecrire chaque heure pour chaque agent dans le fichier Quimper
System.out.println("tabPrenomQ | tabPrenomP");
for (int y=0; y<nbPrenomsQ; y++){//pour chaque prénom de Quimper
if(tabPrenomQ[0][y]!=null){
int z, f=0;
repet :for(z = 0; z<nbPrenomsP; z++){//et pour chaque prenom du fichier Projection
if(tabPrenomP[0][z]!=null){
if(semaineP[1][f]==1){// si la semaine de l'agent en cours trouvée est = 1
//System.out.println("semaineP après le if"+semaineP[1][f]);
System.out.println(tabPrenomQ[0][y]+y+" = "+tabPrenomP[0][z]+z);
if(tabPrenomQ[0][y].equals(tabPrenomP[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
//écrire ds "Quimper2_AS_OE_2012.xlsx", les heure de "Projection"/onglet dans les bonnes colonnes
row2 = sheet2.getRow(Integer.parseInt(tabPrenomQ[1][z]));
cell2 = row2.createCell(2);//on l'écrit à la colonne 2 (semaine 51)
cell2.setCellValue(tabheures[1][y]/24.0);
cellStyle = wb2.createCellStyle();
cellStyle.setDataFormat(fmt.getFormat("hh:MM"));
cell2.setCellStyle(cellStyle);
System.out.println("on écrit l'heure trouvée ");
System.out.println("SEMAINE 1: "+tabPrenomQ[0][y]+y+" = "+tabPrenomP[0][z]+z+"a fait: "+tabheures[1][z]);
z=0;//POUR RETESTER LES AGENT DE LA SEMAINE 1
break repet;
}
}
}
// si la semaine de l'agent en cours trouvée n'est pas = 1: on passe au prénom suivant de Quimper
f++;
}//2eme for
z=0;
}//1er if
}//2ème for
System.out.println("*******************SEMAINE 4*********************");
System.out.println("tabPrenomQ | tabPrenomP");
for (int y=0; y<nbPrenomsQ; y++){//pour chaque prénom de Quimper
if(tabPrenomQ[0][y]!=null){
int z, f=0;
repet :for(z = 0; z<nbPrenomsP; z++){//et pour chaque prenom du fichier Projection
if(tabPrenomP[0][z]!=null){
if(semaineP[1][f]==4){// si la semaine de l'agent en cours trouvée est = 1
//System.out.println("semaineP après le if"+semaineP[1][f]);
System.out.println(tabPrenomQ[0][y]+y+" = "+tabPrenomP[0][z]+z);
if(tabPrenomQ[0][y].equals(tabPrenomP[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
//
System.out.println("SEMAINE 4: "+tabPrenomQ[0][y]+y+" = "+tabPrenomP[0][z]+z+"a fait: "+tabheures[1][z]);
z=0;//POUR RETESTER LES AGENT DE LA SEMAINE 1
break repet;
}
}
}
// si la semaine de l'agent en cours trouvée n'est pas = 1: on passe au prénom suivant de Quimper
f++;
}//2eme for
z=0;
}//1er if
}//2ème for
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("C:/Donnees/Aide_Manager/Quimper2_AS_OE_1erT 2012.xlsx");
wb2.write(fileOut);
fileOut.close();
//System.out.println("écrire à la bonne ligne l'heure que l'agent à effectué dans Projection");
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} |
D'après mes recherche, j'ai modifié mon eclipse.ini comme suit:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx1024m |
Quand je met eclipse.ini:
-Xmx1024m
Quand je redémarre eclipse, j'ai:
"failed to create the java virtual machine"
du coup, je suis repasser a 1024.
je comprend pas, ce qu'il faut faire j'ai terminé mon programme mais il marche pas.
Quelqu'un sait-il ce que je dois faire svp ?
merci