Bonjour,
je développe un logiciel qui log des messages réseaux GSM avec des couleurs différentes pour chaque message.
Les messages sont lus sur le port série du PC par un handler d'évenements
le log est dans un panel:
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
| private static SimpleAttributeSet log_attribute_set = new SimpleAttributeSet();
private static Document log_doc;
panelLog.add(panelLogTitle, BorderLayout.NORTH);
JScrollPane scrollPaneLog = new JScrollPane();
panelLogDisplay = new JPanel();
panelLogDisplay.setBackground(Color.WHITE);
textPaneLog = new JTextPane();
textPaneLog.setEditable(false);
//textPaneLog.setDoubleBuffered(true);
textPaneLog.setBackground(Color.WHITE);
textPaneLog.setFont(CustomFont.getFont("console", 20.0f, Font.PLAIN));
panelLogDisplay.add(textPaneLog);
scrollPaneLog.setViewportView(panelLogDisplay);
panelLog.add(scrollPaneLog);
StyleConstants.setForeground(log_attribute_set, cclCustomColors.getColor(textColor));
StyleConstants.setBackground(log_attribute_set, backGround);
StyleConstants.setBold(log_attribute_set, bold);
StyleConstants.setAlignment(log_attribute_set, alignment);
StyleConstants.setFontSize(log_attribute_set, 12);
log_doc = textPaneLog.getStyledDocument(); |
à chaque message reçu, on le décode, puis on l'affiche avec le code suivant: (text est une String)
log_doc.insertString(log_doc.getLength(), text, log_attribute_set);
Ensuite on repositionne le texte:
MainWindow.textPaneLog.setCaretPosition(log_doc.getLength());
Problème: l'insertion de la string prend beaucoup de temps CPU. Je le vois avec VisualVM.
Y aurait il moyen de rendre l'objet Document plus léger?
Ou carrément d'utilser une autre méthode pour le log, sachant qu'il faut des couleurs différentes?
Merci
Partager