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

 Java Discussion :

[Image] Gestion mémoire et les images


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut [Image] Gestion mémoire et les images
    Salut à tous,

    Je fais un viewer d'image un peu comme l'apperçu de windows, et le problème est que plus je fais défilé des images plus la mémoire utilisé est grande ( dans le gestionnaire des tâches de windows ). Alors qu'à chaque fois je fais un remove du JPanel contenant l'image.
    Comment je dois faire pour corriger ce problème ?
    Merci beaucoup.
    Car même quand je fait un dispose sur cette frame ( qui s'ouvre à partir d'une autre jframe ) cela ne fait pas baisser la mémoire utilisée.
    Help :p

    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
    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
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    package IHM;
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
     
    public class frameViewer extends JFrame implements ActionListener, KeyListener{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
     
    	Object[][] DATA;
     
    	int indice, sizeData;
    	String SUIVANT = ">>";
    	String PRECEDENT = "<<";
    	String FERMER = "CLOSE";
     
    	JPanel pane; 
    	JPanel central;
    	JPanel head;
     
    	afficheFichier comp;
     
     
    	JLabel labelNom, labelDate;
    	JTextField nomFichier, Date;
     
     
     
    	public frameViewer(int indiceDebut, Object[][]Data) {
    		// TODO Auto-generated constructor stub
    	pane = new JPanel();
    	pane.setLayout(new BorderLayout());
     
     
    	//setResizable(false);
    	//setUndecorated(true);
     
    	this.indice = indiceDebut;
    	this.setDATA(Data);
     
    	central = new afficheFichier(DATA[this.indice][0].toString()); 
    	pane.add(central,BorderLayout.CENTER);
     
     
    	setHeader();
     
     
    	JButton suiv = new JButton(SUIVANT);
    	suiv.addActionListener(this);
    	pane.add(suiv,BorderLayout.LINE_END);
    	suiv.setMnemonic(KeyEvent.VK_F);
     
    	JButton prec = new JButton(PRECEDENT);
    	prec.addActionListener(this);
    	pane.add(prec,BorderLayout.LINE_START);
     
    	JButton ferm = new JButton(FERMER);
    	ferm.addActionListener(this);
    	pane.add(ferm,BorderLayout.PAGE_END);
     
    	pane.add(head, BorderLayout.PAGE_START);
     
     
     
    	this.setFocusable(true);
    	this.addKeyListener(this);
    	add(pane);
     
     
     
    	}
     
    	public void setHeader(){
    		/*
    		 * Header
    		 */
    		head = new JPanel();
     
    		nomFichier = new JTextField();
    		nomFichier.setEditable(false);
    		nomFichier.setText(DATA[indice][0].toString());
     
     
    		labelNom = new JLabel(Internation.Langue.getAnInternationalizeString("fichier"));
    		labelNom.setLabelFor(nomFichier);
     
     
     
    		Date = new JTextField();
    		Date.setEditable(false);
    		Date.setText(DATA[indice][3].toString());
     
    		labelDate = new JLabel(Internation.Langue.getAnInternationalizeString("date"));
    		labelDate.setLabelFor(Date);
     
    		head.add(labelNom);
    		head.add(nomFichier);
     
     
    		head.add(labelDate);
    		head.add(Date);
     
     
    	}
     
     
    	public void showSuivant(){
    		/*
    		 * Affiche l'image ou le texte suivant
    		 */
    		if(indice < sizeData -1 )
    		{
    			//System.out.println("av " + indice + " " + sizeData);
     
    			indice+=1;
    			System.out.println("ap " + indice + " " + sizeData);
    			//System.out.println(DATA[indice][0].toString());
     
    			this.Reload();
    		}
     
    	}
     
    	public void showPrecedent(){
    		/*
    		 * Affiche l'image ou le texte suivant
    		 */
    		if(indice > 0)
    		{
    			//System.out.println(indice);
    			indice-=1;
    			System.out.println(indice);
    			//System.out.println(DATA[indice][0].toString());
    			this.Reload();
    		}
    	}
     
    	/**
             * @param dATA the dATA to set
             */
    	public void setDATA(Object[][] dATA) {
    		DATA = dATA;
    		sizeData = DATA.length;
    	}
     
     
     
    	public void Reload(){
     
     
    	nomFichier.setText(DATA[indice][0].toString());
    	Date.setText(DATA[indice][3].toString());
    	pane.remove(central);
    	central = new afficheFichier(DATA[indice][0].toString());
    	pane.add(central,BorderLayout.CENTER);
    	pane.repaint();
    	pane.validate();
     
     
    	}
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		if(arg0.getActionCommand().equals(SUIVANT))
    		  		{
    				new Thread(new Runnable() {
    						public void run() {
    							showSuivant();
    							System.out.println(SUIVANT);
    						}
     
    				 }).start();
     
    		  		}
     
    		 if(arg0.getActionCommand().equals(PRECEDENT))
    	  		{
    			 new Thread(new Runnable() {
    					public void run() {
    						showPrecedent();
    			  			System.out.println(PRECEDENT);
    					}
     
    			 }).start();
     
    	  		}
    	  		if(arg0.getActionCommand().equals(FERMER))
    	  		{
    	  			System.out.println(FERMER);
    	  			dispose();
     
    	  		}
    	}
     
    	@Override
    	public void keyPressed(KeyEvent arg0) {
    		// TODO Auto-generated method stub
    		System.out.println(arg0 + "  " + arg0.getKeyCode());
     
    		if(arg0.getKeyCode() == 39 || arg0.getKeyCode() == 40){
    			this.showSuivant();
    		}
    		else if(arg0.getKeyCode() == 37 || arg0.getKeyCode() == 38){
    			this.showPrecedent();
    		}
     
    	}
     
    	@Override
    	public void keyReleased(KeyEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void keyTyped(KeyEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
     
     
    }

  2. #2
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    toutes tes image sont (aparament) stocké dans un gros tableau donc tant qu'il y a une référence quelque par sur tes image elle ne seront pas libérer.
    De plus le GC passe quand il passe..

  3. #3
    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
    Sinon mais je ne conseillerais pas ...
    (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

  4. #4
    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
    ta classe afficheFichier, tu peux la montrer, après tout c'est elle qui charge tes images, ce serait bien de voir comment elle fonctionne. Si tu utilise du code qui utilise directement ou indirectement Toolkit.getImage(), il va y avoir du caching qui va entrer en ligne de compte

  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
    Citation Envoyé par wax78 Voir le message
    Sinon mais je ne conseillerais pas ...
    Exact, je ne vois d'ailleurs pas, du coup, ce que fait ce post là . Ne jamais appeler explicitement gc()!

  6. #6
    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
    Citation Envoyé par tchize_ Voir le message
    Exact, je ne vois d'ailleurs pas, du coup, ce que fait ce post là . Ne jamais appeler explicitement gc()!
    Je l'ai dit ... ne pas utiliser
    (J'ai dut l'utliiser dans le temps, je precise dans le temps, et ca m'a sauver la vie, tout en callant le programme pdt qlq secondes a chaque appel...)

    Edit : En effet, même voulant l'aider, un System.gc() n'est pas vraiment une aide il faut le reconnaitre.
    (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

  7. #7
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    ça c'est ma classe qui permet d'afficher les images dans un JPanel

    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
    package IHM;
     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
     
     
    public class afficheImage extends JPanel {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private BufferedImage sourceImage;
     
    	private int sourceImageWidth;
     
    	private int sourceImageHeight;
     
     
     
    	public afficheImage(File monImage) {
    		super();
    		initializePanel(monImage);
    	}
     
    	private void initializePanel(File monImage) {
    		//setPreferredSize(new Dimension(640, 480));
    		int width_screen = (Toolkit.getDefaultToolkit().getScreenSize().width )*4 / 5 ;
    		int height_screen = Toolkit.getDefaultToolkit().getScreenSize().height * 4 / 5;
    			try {
    				sourceImage = ImageIO.read(monImage);
     
     
    				sourceImageWidth = sourceImage.getWidth();
    				sourceImageHeight = sourceImage.getHeight();
     
    				if (sourceImageWidth > width_screen){
    					sourceImageHeight = sourceImageHeight * width_screen / sourceImageWidth;
    					sourceImageWidth = width_screen;
    				}
    				if ( sourceImageHeight > height_screen )
    				{
    					sourceImageWidth = sourceImageWidth * height_screen / sourceImageHeight;
    					sourceImageHeight = height_screen;
    				}
     
     
    				setPreferredSize(new Dimension(sourceImageWidth, sourceImageHeight));
     
    		} 
    		catch (IOException e) {
    			//e.printStackTrace();
    			this.add(new JTextArea("IMAGE NON TROUVE"));
    		}
    	}
     
    	public void paint(Graphics g){
     
    		int width = (sourceImageWidth);
    		int height = (sourceImageHeight);
    		Image img = sourceImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
    		g.drawImage(img,0,0,null);
     
    	}
     
     
    }


    Et voilà la partie du code affichefichiers qui appelle afficheimage
    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
     
     
    public class afficheFichier extends JPanel{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	/**
             * 
             */
    	Image img;
     
    	public afficheFichier(String nomFichier ) {
     
    //
     
    		else if(Outils.getExtension(nomFichier).equals("jpg") || Outils.getExtension(nomFichier).equals("tif")){
     
    		System.out.println("path" + Config.getPathblarchive() + nomFichier );
    		File fileImage = new File(Config.getPathblarchive() + nomFichier);
     
    		if(fileImage.exists()){
    			try {
    				img = ImageIO.read(fileImage);
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				//e.printStackTrace();
    				System.err.println("Image non trouvée");
    			}
    			add(new ImagePanel(img));
     
    		}
    voilà, je ne suis pas assez calé pour voir le pb

  8. #8
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    pas d'idées ?

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Déjà, ça faut éviter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image img = sourceImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
    Mais c'est principalement plus pour des problème de performance graphique que de mémoire. Si tu veux une bonne méthode pour crééer des appercus utilise GraphicsUtilities.createThumbnail() dans SwingX (normalement tu devrais pouvoir recopier le code si tu ne veux pas rajouter SwingX en dépendance) qui offre un bon compromis qualité/vitesse. Sinon tu peux utiliser le code suivant qui est plus simple (mais produit un redimensionnement de moins bonne qualité) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice).getDefaultConfiguration();
    BufferedImage img = gc.createCompatibleImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = img.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(sourceImage, 0, 0, width, height, null);
    g.dispose();
    Par contre il faut éviter de faire des redimensionnements à chaque réaffichage !
    Precalcule les appercus en petite taille une bonne fois pour toute lorsque le répertoire est scanné et vire les grandes images de la mémoire.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    Je teste ça, et je poste dès que j'avance dessus. merci

  11. #11
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    En fait je redimensionne les images pour qu'elle s'affiche en intégralité sur l'écran, tout en conservant le bon rapport hauteur / largeur.

    Je ne veux pas créer une diapo de ces images. Ce que je souhaite faire c'est une sorte de copie de l'aperçu d'image de Windows.
    Donc quand tu ouvres l'aperçu tu as directement l'image en grand, une flèche pour aller à la suivant une de retour, un bouton rotation et voilà.

    Mon code fonctionne si tu veux, mais le problème est que plus j'affiche d'image, ( également vrai si je ré affiche les mêmes ) plus la mémoire utilisée est grande.
    Maintenant je voudrai savoir pourquoi ça fait ça. Si quelqu'un a une idée ?

    Vu que c'est pour un projet professionnel, je ne voudrai pas que l'application plante, car l'utilisateur a afficher 200 images sans fermer l'application.

  12. #12
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    Code qui permet d'afficher les images dans un JPanel.
    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
    package IHM;
     
    import java.awt.*;
     
    import javax.swing.*;
     
    public class ImagePanel extends JPanel {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	Image image = null;
     
    	int width;
    	int height;
    	int width_screen = Toolkit.getDefaultToolkit().getScreenSize().width * 9 / 10;
    	int height_screen = Toolkit.getDefaultToolkit().getScreenSize().height * 9 / 10;
     
    	public ImagePanel(Image image) {
    		this.setBackground(Color.WHITE);
    		this.image = image;
    		width = image.getWidth(null);
    		height = image.getHeight(null);
     
    		if (width > width_screen) {
    			height = height * width_screen / width;
    			width = width_screen;
    		}
    		if (height > height_screen) {
    			width = width * height_screen / height;
    			height = height_screen;
    		}
     
    		System.out.println("TAILLE : " + width + " x " + height);
    		this.setPreferredSize(new Dimension(width, height));
     
    	}
     
    	public ImagePanel() {
     
    	}
     
    	public void setImage(Image image) {
    		this.image = image;
    	}
     
    	public Image getImage(Image image) {
    		return image;
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		if (image != null) {
    			g.drawImage(image, 0, 0, width, height, this);
    			g.dispose();
     
    		}
    	}
    }
    ça c'est le code qui appelle l'image en gros
    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
     
    public class afficheFichier extends JPanel {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	/**
             * 
             */
    	Image img;
     
    	public afficheFichier(String nomFichier) {
     
    if (fileImage.exists()) {
    				try {
    					img = ImageIO.read(fileImage);
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					// e.printStackTrace();
    					System.err.println("Image non trouvée");
    				}
    				add(new ImagePanel(img));
     
               }
    }
    Et là c'est un bout de code qui permet d'afficher le tout dans une JFrame
    Faut imaginer que le panel central est dans un borderlayout au centre.
    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
    public class frameViewer extends JFrame implements ActionListener {
     
     
    	Object[][] DATA;
     
    	@SuppressWarnings("serial")
    	public frameViewer(int indiceDebut, Object[][] Data) {
    		// TODO Auto-generated constructor stub
    		pane = new JPanel();
    		pane.setLayout(new BorderLayout());
     
    		this.indice = indiceDebut;
    		this.setDATA(Data);
     
    		central = new afficheFichier(DATA[this.indice][0].toString());
    }

  13. #13
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    Tu n'enleve pas le panelImage deja present avant d'en ajouter un nouveau, ca peu venir de la.

  14. #14
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    c'est pas ça, j'ai testé un removeAll();

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Ca ne serait pas tes Threads, car si je comprend bien tu lances un nouveau thread a chaque fois. Monitor un peu plus ta jvm pour voir son evolution au niveau des threads.

  16. #16
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Citation Envoyé par HunTR Voir le message
    c'est pas ça, j'ai testé un removeAll();
    humm tu doit garder des reference soit sur le panel, soit sur l'image quelque part alors ..

  17. #17
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    Il n'y a pas de threads.
    Et comment je fais pour éventuellement trouver ce qui bouffe de la mémoire ?
    Mettre des réf à zéro je suis d'accord, mais je ne vois pas où elles sont.
    Il n'y a pas un expert pour me dire que je suis un gland ?

  18. #18
    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
    si tu trouve pas par analyse du code, tu peux utiliser un profiler, qui te mettre en évidence où son référencées toutes tes images

  19. #19
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    Par défaut
    Tu utilises lequel ? Sachant que je suis sous eclipse, lequel est simple d'utilisation ? ( celui que le plus de monde utilise )

  20. #20
    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
    Personnellement, j'utilise http://www.ej-technologies.com/produ.../overview.html, il est payant mais tu dois peut obtenir assez facilement une licence démo de 30 jours

Discussions similaires

  1. Charger les images des diapos et les afficher
    Par Ciloe dans le forum jQuery
    Réponses: 0
    Dernier message: 22/02/2012, 23h22
  2. Réponses: 4
    Dernier message: 28/06/2011, 16h05
  3. Les images en CSS dans les mails HTML
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/02/2011, 18h02
  4. Programme C++ pour convertir les images tif ou JPG en image raw
    Par kruskal21 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 29/01/2010, 22h09
  5. [Traitement d'image] Quelle format pour les images "boutons"
    Par byloute dans le forum Webdesign & Ergonomie
    Réponses: 1
    Dernier message: 26/02/2008, 10h25

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