Bonjour/Bonsoir à tous,

Pour vous présenter un peu le truc, j'essaie de faire une sorte de "MSNPlus", vous savez le truc qui n'existe plus depuis quelques années ... afin de pouvoir relire d'anciennes conversations MSN. Je suis donc parti de mes historiques de conversations, je les ai adapté comme je voulais afin d'avoir les informations que je souhaitais vraiment, etc ... bref, bref, bref.

Je me suis dirigé ensuite sur du swing afin de parcourir mes dossiers et charger les fichiers .html. L'interface est faite, le chargement des html se fait également plutôt bien. Par contre, je rencontre un problème de gestion de la RAM assez impressionnant. Du SWING, j'en avais pas fait depuis une dizaine d'années, c'était à la fac .. et j'étais vraiment pas doué . Donc, j'ai fait pas mal de recherche pour en arriver là où je suis avec cette "liseuse".

Pour être plus précis : A chaque chargement de fichier html (qui font entre 4 et 6 Mo environ), j'ai augmentation de la RAM utilisé de 150Mo environ. Ce qui amène à avoir un truc qui demande 1Go assez rapidement pour fonctionner ... je ne m'attendais pas à une consommation aussi élevée ...

Alors, j'imagine que le composant est plutôt bien (Le JEditorPane est fait pour ça, d'après ce que j'ai lu), donc j'ai du rater un truc, mais quoi ? (Ou alors, je dois changer de composant, parce que, finalement, j'me suis planté depuis le début dessus ?)

Quelques éléments :
Avec JConsole, on voit bien une augmentation de la mémoire utilisé à chaque "chargement" de fichier, même si celle-ci diminue par la suite (parfois), mais la mémoire utilisé via le gestionnaire des tâches, elle ne diminue jamais, ne fait qu'augmenter ...
Nom : Conso.png
Affichages : 307
Taille : 88,1 Ko

Je vous mets le code de ma classe (sans les imports), le chargement du fichier se fait dans la méthode "readSelectedFile"
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
 
public class MyRP extends JFrame {
 
	private static final long serialVersionUID = 8649207663033200521L;
	GridBagConstraints c = new GridBagConstraints();
	JEditorPane editorPane = new JEditorPane();
 
	public MyRP() {
 
		setTitle("My RP");
		// Modifier la taille
		setSize(1500, 800);
		// Taille non modifiable par l'utilisateur
		setResizable(true);
		// Un clic sur croix ferme la fenetre
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Centrer la fenetre par rapport à l'écran
		setLocationRelativeTo(null);
 
		getContentPane().setLayout(new GridBagLayout());
 
		c.weightx = 1.0;
		c.gridx = 1;
		c.gridy = 0;
	    c.ipady = 1500;
	    c.ipadx = 1200;
	    c.fill = GridBagConstraints.VERTICAL;
		c.insets = new Insets(2, 0, 2, 2);
 
		getContentPane().add(new JScrollPane(editorPane), c);
 
		// Build the panel of controls
		JPanel upperPanel = new JPanel();
		upperPanel.setLayout(new BorderLayout());
 
		// Ajout de l'arbre hierarchique
		JTree tree = new JTree(addNodes(null, new File(".")));
		JScrollPane scrollPane = new JScrollPane(tree);
		upperPanel.add(scrollPane, "Center"); // Add the tree
 
		Box controlPanel = new Box(BoxLayout.Y_AXIS);
 
		// Add a button to install the text
		JButton bouton = new JButton("Ouvrir un fichier");
		controlPanel.add(bouton);
 
		upperPanel.add(controlPanel, "South");
	    c.gridx = 0;
	    c.gridy = 0;
	    c.fill = GridBagConstraints.BOTH;
	    c.ipadx = 50;
	    c.weighty = 1;
	    c.insets = new Insets(2, 10, 2, 2);
		getContentPane().add(upperPanel, c);
 
		// Add a listener to the button
		bouton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser dialogue = new JFileChooser(new File("."));
				File fichier = new File("");
				if (dialogue.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
					fichier = dialogue.getSelectedFile();
				}
 
				if (fichier.toString().contains("MyRP")) {
					readSelectedFile(fichier);
				} else if(StringUtils.isNotBlank(fichier.toString())){
					JOptionPane.showMessageDialog(new JFrame(), "Le fichier n'est pas au bon format : MyRP - Mois - Année.html");
				}
			}
		});
 
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
 
				String chemin = "";
				DefaultMutableTreeNode node2 = node;
				while (node2.getParent() != null) {
					if (node2.getParent() != null) {
						chemin = node2.getUserObject() + "\\" + chemin;
					}
					node2 = (DefaultMutableTreeNode) node2.getParent();
				}
 
				chemin = chemin.substring(0, chemin.length() - 1);
				if (chemin.toString().contains("MyRP")) {
					readSelectedFile(new File(System.getProperty("user.dir") + "\\" + chemin));
				} else {
					JOptionPane.showMessageDialog(new JFrame(), "Le fichier n'est pas au bon format : MyRP - Mois - Année.html");
				}
			}
		});
 
	}
 
	private void readSelectedFile(File fichier) {
		try {
			File file = new File(fichier.toString());
			editorPane.setPage(file.toURI().toURL());
			editorPane.setContentType("text/html;charset=UTF-8");
			editorPane.setEditable(false);
		} catch (Exception exception) {
			exception.printStackTrace();
		}
	}
 
	@SuppressWarnings({ "rawtypes", "unchecked" })
	DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) {
		String curPath = dir.getPath();
		DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath);
		if (curTop != null) {
			curTop.add(curDir);
		}
		Vector ol = new Vector();
		String[] tmp = dir.list();
		for (int i = 0; i < tmp.length; i++)
			ol.addElement(tmp[i]);
		Collections.sort(ol, String.CASE_INSENSITIVE_ORDER);
		File f;
		Vector files = new Vector();
		for (int i = 0; i < ol.size(); i++) {
			String thisObject = (String) ol.elementAt(i);
			String newPath;
			if (curPath.equals("."))
				newPath = thisObject;
			else
				newPath = curPath + File.separator + thisObject;
			if ((f = new File(newPath)).isDirectory())
				addNodes(curDir, f);
			else
				files.addElement(thisObject);
		}
		for (int fnum = 0; fnum < files.size(); fnum++)
			curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum)));
		return curDir;
	}
 
}
Merci d'avance pour votre temps