titojava
Messages postés3Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 2 avril 2009
-
1 avril 2009 à 09:03
titojava
Messages postés3Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 2 avril 2009
-
2 avril 2009 à 08:12
Bonjour,
Je suis relativement débutant en JAVA. Je travail actuellement sur un soft pour l'entreprise ou je suis stagiaire, et je suis devant un problème qui, malgré mes recherches, reste non résolu. java.lang.OutOfMemoryError: Java heap space est une erreur que je peu résoudre en augmentant l'allocation mémoire. Cependant cela ne ferait que retarder mon problème, d'autant plus qu'il est impossible que ce soft requiert autant de ressource.
Le programme est un logiciel de diagramme de phase. il retranscrit un diagramme d'aprés un certain nombre de taches qui dépendent les unes des autres. Mon programme est composé d'une classe "Diagramme" qui utilise des objet de type "Tache" que j'ai créé et qui contiennent plusieurs fonction. Il n'y a , a priori, aucun probléme avec ces classes. le main, crée une JFrame qui contient un menu, et un système d'onglets. un onglet contient 3 JPanel (gauche, droite et bas, qui sont separé par des JSplit. le panneau de gauche contient un tableau qui repertorie chaque tache avec leur caractéristique, et le panneau de droite contient le dessin du diagramme. Pour finir le panneau du bas ne contient rien pour le moment.
J'en viens au problème. pour éditer une tache j'appel un objet TaskDialog qui hérite de JDialog, ou je programme les type d'édition selon les paramétre que l'on veux alouer a la tache.
Alors voila comment ca se passe:
je compile le programme, je crée un nouvel onglet (un nouveau diagramme quoi) , je crée une nouvelle tache. Jusque la tout va bien. maintenant je l'édite, a premiére vue l'édition marche correctement, le TaskDialog marche bien. Cependant au bout d'un certain nombre d'appel a TaskDialog j'ai l'erreur java.lang.OutOfMemoryError: Java heap space alors que je n'ai pour le moment qu'une seule et unique tache et que celle ci ne dépend de rien du tout. J'en déduit donc que le probléme vien de la TaskDialog.
voici comment j'instancie ma boite de dialogue:
je la crée: TaskDialog editTask;
ensuite dans une fonction appelée "boite edition" qui prend un int en paramétre j'instancie ma boite:
editTask = new TaskDialog(null,d.tableauTache[i].id,true,d.tableauTache[i],this);
d.tableauTache est un tableau de tache contenu dans le diagramme" d", "i" est la tache concernée par l'édition
"id" est le nom de la tache suivi de son emplacement dans le tableau.
je vais poster le code avec les comentaires dans le message suivant.
A voir également:
Exception in thread "awt-eventqueue-0" java.lang.outofmemoryerror: java heap space
titojava
Messages postés3Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 2 avril 2009 1 avril 2009 à 09:21
//voila le code, il y a 600 lignes, donc il vaux mieux utiliser notePad pour le lire.//Import des bibliotheques utilisée dans cette classeimport java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;
public class TaskDialog extends JDialog { private static final long serialVersionUID = 1L; //tache Editée contient la tache que l'ont est en train d'éditer protected Tache tacheEditee; //les panneau ci dessous sont les différent panneau d'affichage et d'édition protected JPanel panDebutE, panFinE, panVitesse, panDistance, panDuree, panDureeE, panAcceleration, panDistAccel, panDeceleration, panDistDecel, panAngle, panRayon, panVitessAng; //les panneau ci dessous contiennent les panneau d'affichage et d'édition protected JPanel content, contentGauche, contentDroite; //tabmodele contient le TabModele utilisé pour le tableau, c'est dans cet objet que l'on appel la boite de dialogue, ici j'en ai besoin pour rappeler la fonction d'édition protected TabModel tabmodele; //les JLabel permettent l'affichage des caractéristiques private JLabel nomA,nomEnsembleA,debutA,finA,dureeA,commandeA,vitesseA,distanceA,accelA,distAccelA,decelA,distDecelA,rayonA, angleA, vitesseAngA, predecesseurA, typePreA;//A:Affichage //les jtextfield permettent la saisie pour l'édition private JTextField nomE,nomEnsembleE,debutE,finE,dureeE,vitesseE,distanceE,accelE,distAccelE,decelE,distDecelE,rayonE, angleE, vitesseAngE;//E: Edition //idem pour les JComboBox private JComboBox commandeE,predecesseurE,predecesseurS,typePreE; //----------------------------------------------------------------------------------CONSTRUCTEUR DE LA BOITE DE DIALOGUE public TaskDialog(JFrame parent, String title,boolean modal,Tache t, TabModel tab){ super(parent, title, modal);// on appel le constructeur de JDialog this.tabmodele=tab; //on recupere le TabModele this.tacheEditee=t; //on récupere la tache éditée this.setSize(700,600); //on défini une taille a notre JDialog this.setLocationRelativeTo(null); this.setResizable(false); this.setBackground(Color.white); this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); this.initComponent(); // appel de l'initialisation this.setVisible(true); //on l'affiche } //---------------------------------------------------------------------------------INITIALISATION DU COMPOSANT private void initComponent(){ //nom JPanel panNom = new JPanel(); panNom.setBackground(Color.white); panNom.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); nomE=new JTextField(); nomE.setPreferredSize(new Dimension(100,15)); panNom.setBorder(BorderFactory.createTitledBorder("editer le nom :")); nomA= new JLabel(this.tacheEditee.nomTache); panNom.setLayout(new GridLayout(1,2)); panNom.add(nomA); panNom.add(nomE); //nom ensemble JPanel panNomEnsemble = new JPanel(); panNomEnsemble.setBackground(Color.white); panNomEnsemble.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); nomEnsembleE=new JTextField(); nomEnsembleE.setPreferredSize(new Dimension(100,15)); panNomEnsemble.setBorder(BorderFactory.createTitledBorder("editer le type :")); nomEnsembleA= new JLabel(this.tacheEditee.nomEnsemble); panNomEnsemble.setLayout(new GridLayout(1,2)); panNomEnsemble.add(nomEnsembleA); panNomEnsemble.add(nomEnsembleE); //commande JPanel panCommande = new JPanel(); panCommande.setBackground(Color.white); panCommande.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); commandeE= new JComboBox(); commandeE.addItem("NA"); commandeE.addItem("Fourchette"); commandeE.addItem("Vitesse"); commandeE.addItem("Durée"); commandeE.addItem("Accel/decel"); commandeE.addItem("Vitesse angulaire"); commandeA= new JLabel("type de commande"); switch(this.tacheEditee.commande){ case -1://-1:pas de commande attribuée, la tache est inactive commandeE.setSelectedItem("NA"); break; case 0://0:fourchette de temps commandeE.setSelectedItem("Fourchette"); break; case 1://1:vitesse commandeE.setSelectedItem("Vitesse"); break; case 2://2:temps depart plus duree commandeE.setSelectedItem("Durée"); break; case 3://3:accel/decel commandeE.setSelectedItem("Accel/decel"); break; case 4://4:vitesse angulaire commandeE.setSelectedItem("Vitesse angulaire"); break; } panCommande.add(commandeA); panCommande.add(commandeE); commandeE.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { appliquer(); }}); //début JPanel panDebut = new JPanel(); panDebut.setBackground(Color.white); panDebut.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDebut.setBorder(BorderFactory.createTitledBorder("début :")); debutA= new JLabel(Double.toString(this.tacheEditee.debutTache)); panDebut.add(debutA); //début-> Edition panDebutE = new JPanel(); panDebutE.setBackground(Color.white); panDebutE.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDebutE.setBorder(BorderFactory.createTitledBorder("début :")); switch(tacheEditee.typePre){ case 0: debutE= new JTextField(); debutE.setPreferredSize(new Dimension(100,15)); panDebutE.add(debutE); break; case 1: JLabel infoDebut= new JLabel("Tache de début de process"); panDebutE.add(infoDebut); break; case 2: String s= new String("Predecesseur(s):"); predecesseurE = new JComboBox(); predecesseurS = new JComboBox(); for(int i=0;i=0){ predecesseurS.addItem(this.tabmodele.d.tableauTache[this.tacheEditee.predecesseur[i]].id); s=s+this.tabmodele.d.tableauTache[this.tacheEditee.predecesseur[i]].nomTache+"; "; } } predecesseurA = new JLabel(s); int[] tabPredecesseurPossible; for(int i=0;i Edition panFinE = new JPanel(); panFinE.setBackground(Color.white); panFinE.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panFinE.setBorder(BorderFactory.createTitledBorder("Fin :")); finE= new JTextField(); finE.setPreferredSize(new Dimension(100,15)); panFinE.add(finE); //choix type de predecesseur JPanel panTypePre = new JPanel(); panTypePre.setBackground(Color.white); panTypePre.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); typePreE= new JComboBox(); typePreE.addItem("libre"); typePreE.addItem("début de process"); typePreE.addItem("predecesseur(s)"); typePreA= new JLabel("type de dépendance"); switch(this.tacheEditee.typePre){ case 0://0:fourchette de temps typePreE.setSelectedItem("libre"); break; case 1://1:vitesse typePreE.setSelectedItem("début de process"); break; case 2://2:temps depart plus duree typePreE.setSelectedItem("predecesseur(s)"); break; } typePreE.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { appliquer(); }}); panTypePre.add(typePreA); panTypePre.add(typePreE); //duree panDuree = new JPanel(); panDuree.setBackground(Color.white); panDuree.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDuree.setBorder(BorderFactory.createTitledBorder("Durée :")); dureeA= new JLabel(Double.toString(this.tacheEditee.dureeTache)); panDuree.add(dureeA); //duree --> Edition panDureeE = new JPanel(); panDureeE.setBackground(Color.white); panDureeE.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDureeE.setBorder(BorderFactory.createTitledBorder("Durée :")); dureeE= new JTextField(); dureeE.setPreferredSize(new Dimension(100,15)); panDureeE.add(dureeE); //vitesse JPanel panVitesse = new JPanel(); panVitesse.setBackground(Color.white); panVitesse.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panVitesse.setBorder(BorderFactory.createTitledBorder("Vitesse :")); vitesseA= new JLabel(Double.toString(this.tacheEditee.vitesse)); vitesseE = new JTextField(); vitesseE.setPreferredSize(new Dimension(100,15)); panVitesse.setLayout(new GridLayout(1,2)); panVitesse.add(vitesseA); panVitesse.add(vitesseE); //distance JPanel panDistance = new JPanel(); panDistance.setBackground(Color.white); panDistance.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDistance.setBorder(BorderFactory.createTitledBorder("Distance :")); distanceA= new JLabel(Double.toString(this.tacheEditee.distance)); panDistance.add(distanceA); distanceE= new JTextField(); distanceE.setPreferredSize(new Dimension(100,15)); panDistance.add(distanceE); panDistance.setLayout(new GridLayout(1,2)); //acceleration JPanel panAcceleration = new JPanel(); panAcceleration.setBackground(Color.white); panAcceleration.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panAcceleration.setBorder(BorderFactory.createTitledBorder("Acceleration :")); accelA= new JLabel(Double.toString(this.tacheEditee.acceleration)); accelE= new JTextField();; accelE.setPreferredSize(new Dimension(100,15)); panAcceleration.setLayout(new GridLayout(1,2)); panAcceleration.add(accelA); panAcceleration.add(accelE); //distance acceleration JPanel panDistAccel = new JPanel(); panDistAccel.setBackground(Color.white); panDistAccel.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDistAccel.setBorder(BorderFactory.createTitledBorder("Distance accel :")); distAccelA= new JLabel(Double.toString(this.tacheEditee.distanceAccel)); distAccelE= new JTextField(); distAccelE.setPreferredSize(new Dimension(100,15)); panDistAccel.setLayout(new GridLayout(1,2)); panDistAccel.add(distAccelA); panDistAccel.add(distAccelE); //deceleration JPanel panDeceleration = new JPanel(); panDeceleration.setBackground(Color.white); panDeceleration.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDeceleration.setBorder(BorderFactory.createTitledBorder("Déceleration :")); decelA= new JLabel(Double.toString(this.tacheEditee.deceleration)); decelE= new JTextField(); decelE.setPreferredSize(new Dimension(100,15)); panDeceleration.setLayout(new GridLayout(1,2)); panDeceleration.add(decelA); panDeceleration.add(decelE); //distance deceleration JPanel panDistDecel = new JPanel(); panDistDecel.setBackground(Color.white); panDistDecel.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panDistDecel.setBorder(BorderFactory.createTitledBorder("Distance decel :")); distDecelA= new JLabel(Double.toString(this.tacheEditee.distanceDecel)); distDecelE= new JTextField(); distDecelE.setPreferredSize(new Dimension(100,15)); panDistDecel.setLayout(new GridLayout(1,2)); panDistDecel.add(distDecelA); panDistDecel.add(distDecelE); //rayon JPanel panRayon = new JPanel(); panRayon.setBackground(Color.white); panRayon.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panRayon.setBorder(BorderFactory.createTitledBorder("Rayon:")); rayonA= new JLabel(Double.toString(this.tacheEditee.rayon)); rayonE= new JTextField(); rayonE.setPreferredSize(new Dimension(100,15)); panRayon.setLayout(new GridLayout(1,2)); panRayon.add(rayonA); panRayon.add(rayonE); //angle JPanel panAngle = new JPanel(); panAngle.setBackground(Color.white); panAngle.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panAngle.setBorder(BorderFactory.createTitledBorder("Angle de deplacement:")); angleA= new JLabel(Double.toString(this.tacheEditee.angle)); angleE= new JTextField(); angleE.setPreferredSize(new Dimension(100,15)); panAngle.setLayout(new GridLayout(1,2)); panAngle.add(angleA); panAngle.add(angleE); //vitesse angulaire JPanel panVitessAng = new JPanel(); panVitessAng.setBackground(Color.white); panVitessAng.setPreferredSize(new Dimension((int)((this.getWidth()/2)-10),60)); panVitessAng.setBorder(BorderFactory.createTitledBorder("Angle de deplacement:")); vitesseAngA= new JLabel(Double.toString(this.tacheEditee.vitesseAngulaire)); vitesseAngE= new JTextField(); vitesseAngE.setPreferredSize(new Dimension(100,15)); panVitessAng.setLayout(new GridLayout(1,2)); panVitessAng.add(vitesseAngA); panVitessAng.add(vitesseAngE); //=======================================================================================ajout des panneau aux panneau principaux contentGauche= new JPanel(); contentGauche.setBackground(Color.white); contentGauche.setSize((int)(this.getSize().width/2), this.getSize().height); contentGauche.setBorder(BorderFactory.createTitledBorder("proprietés")); contentGauche.add(panNom); contentGauche.add(panNomEnsemble); contentGauche.add(panDebut); contentGauche.add(panFin); contentGauche.add(panDuree); contentGauche.add(panCommande); contentGauche.add(panTypePre); contentDroite= new JPanel(); contentDroite.setSize((int)(this.getSize().width/2), this.getSize().height); contentDroite.setBackground(Color.white); contentDroite.setBorder(BorderFactory.createTitledBorder("Edition")); switch(this.tacheEditee.commande){ // suivant le type de commande de la tache on affiche que certaines boites d'édition case -1://-1:pas de commande attribuée, la tache est inactive break; case 0://0:fourchette de temps if(this.tacheEditee.typePre==2){contentDroite.add(predecesseurA);} contentDroite.add(panDebutE); contentDroite.add(panFinE); break; case 1://1:vitesse if(this.tacheEditee.typePre==2){contentDroite.add(predecesseurA);} contentDroite.add(panDebutE); contentDroite.add(panVitesse); contentDroite.add(panDistance); break; case 2://2:temps depart plus duree if(this.tacheEditee.typePre==2){contentDroite.add(predecesseurA);} contentDroite.add(panDebutE); contentDroite.add(panDureeE); break; case 3://3:accel/decel if(this.tacheEditee.typePre==2){contentDroite.add(predecesseurA);} contentDroite.add(panDebutE); contentDroite.add(panAcceleration); contentDroite.add(panDistAccel); contentDroite.add(panDeceleration); contentDroite.add(panDistDecel); break; case 4://4:vitesse angulaire if(this.tacheEditee.typePre==2){contentDroite.add(predecesseurA);} contentDroite.add(panDebutE); contentDroite.add(panAngle); contentDroite.add(panRayon); contentDroite.add(panVitessAng); break; } JPanel controle = new JPanel();//panneau de controle contenant appliquer et quitter JButton okBouton = new JButton("Appliquer"); okBouton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { tableauInfluence(); appliquer(); }}); JButton cancelBouton = new JButton("quitter"); cancelBouton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { setVisible(false); }}); controle.add(okBouton); controle.add(cancelBouton); content= new JPanel(); content.setBackground(Color.white); content.setSize(700, 600); content.add(contentGauche,BorderLayout.EAST); content.add(contentDroite,BorderLayout.WEST); content.setLayout(new GridLayout(1,2)); this.getContentPane().add(content, BorderLayout.CENTER); this.getContentPane().add(controle, BorderLayout.SOUTH); } public void appliquer(){ //cette fonction applique les changement en changeant directement les variable dans la tache, a la fin, celle ci reappel la fonction d'edition de TabModel afin que la boite se réaffiche. if(typePreE.getSelectedItem().toString().equals("libre")){this.tacheEditee.typePre=0;} else if(typePreE.getSelectedItem().toString().equals("début de process")){this.tacheEditee.typePre=1;} else if(typePreE.getSelectedItem().toString().equals("predecesseur(s)")){this.tacheEditee.typePre=2;} if(commandeE.getSelectedItem().toString().equals("NA")){this.tacheEditee.commande=-1;} else if(commandeE.getSelectedItem().toString().equals("Fourchette")){this.tacheEditee.commande=0;} else if(commandeE.getSelectedItem().toString().equals("Vitesse")){this.tacheEditee.commande=1;} else if(commandeE.getSelectedItem().toString().equals("Durée")){this.tacheEditee.commande=2;} else if(commandeE.getSelectedItem().toString().equals("Accel/decel")){this.tacheEditee.commande=3;} else if(commandeE.getSelectedItem().toString().equals("Vitesse angulaire")){this.tacheEditee.commande=4;} if(nomE.getText().equals("")==false){ this.tacheEditee.nomTache=nomE.getText(); this.tacheEditee.id=nomE.getText()+" ["+this.tacheEditee.numero+"]"; } if(nomEnsembleE.getText().equals("")==false){ this.tacheEditee.nomEnsemble=nomEnsembleE.getText(); } switch(this.tacheEditee.commande){ case 0: try{if(debutE.getText().equals("")==false){this.tacheEditee.debutTache=Double.parseDouble(debutE.getText());}}catch(java.lang.NullPointerException e){} try{if(finE.getText().equals("")==false){this.tacheEditee.finTache=Double.parseDouble(finE.getText());}}catch(java.lang.NullPointerException e){} break; case 1: try{if(debutE.getText().equals("")==false){this.tacheEditee.debutTache=Double.parseDouble(debutE.getText());}}catch(java.lang.NullPointerException e){} try{if(vitesseE.getText().equals("")==false){this.tacheEditee.vitesse=Double.parseDouble(vitesseE.getText());}}catch(java.lang.NullPointerException e){} try{if(distanceE.getText().equals("")==false){this.tacheEditee.distance=Double.parseDouble(distanceE.getText());}}catch(java.lang.NullPointerException e){} break; case 2: try{if(debutE.getText().equals("")==false){this.tacheEditee.debutTache=Double.parseDouble(debutE.getText());}}catch(java.lang.NullPointerException e){} try{if(dureeE.getText().equals("")==false){this.tacheEditee.dureeTache=Double.parseDouble(dureeE.getText());}}catch(java.lang.NullPointerException e){} break; case 3: try{if(debutE.getText().equals("")==false){this.tacheEditee.debutTache=Double.parseDouble(debutE.getText());}}catch(java.lang.NullPointerException e){} try{if(accelE.getText().equals("")==false){this.tacheEditee.acceleration=Double.parseDouble(accelE.getText());}}catch(java.lang.NullPointerException e){} try{if(decelE.getText().equals("")==false){this.tacheEditee.deceleration=Double.parseDouble(decelE.getText());}}catch(java.lang.NullPointerException e){} try{if(distAccelE.getText().equals("")==false){this.tacheEditee.distanceAccel=Double.parseDouble(distAccelE.getText());}}catch(java.lang.NullPointerException e){} try{if(distDecelE.getText().equals("")==false){this.tacheEditee.distanceDecel=Double.parseDouble(distDecelE.getText());}}catch(java.lang.NullPointerException e){} break; case 4: try{if(debutE.getText().equals("")==false){this.tacheEditee.debutTache=Double.parseDouble(debutE.getText());}}catch(java.lang.NullPointerException e){} try{if(rayonE.getText().equals("")==false){this.tacheEditee.rayon=Double.parseDouble(rayonE.getText());}}catch(java.lang.NullPointerException e){} try{if(angleE.getText().equals("")==false){this.tacheEditee.angle=Double.parseDouble(angleE.getText());}}catch(java.lang.NullPointerException e){} try{if(vitesseAngE.getText().equals("")==false){this.tacheEditee.vitesseAngulaire=Double.parseDouble(vitesseAngE.getText());}}catch(java.lang.NullPointerException e){} break; } this.tacheEditee.maj(); //mise a jour for(int i=0;i0&&test==false){ int j=0; for(int i=0;i