J'ai une très longue chaîne que je reçois d'un livre. Je l'affiche dans un JTextArea en utilisant la méthode setText(). Il gèle l'interface utilisateur et prend beaucoup de temps. Comment puis-je contourner cela?JTextArea setText (veryLongString) prend trop de temps
est ici comme SSCCE:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
public class SSCCE extends JFrame {
JTextArea textArea;
public SSCCE() {
String text = buildLongString(400000);
textArea = new JTextArea();
textArea.setText(text);
textArea.setLineWrap(true);
add(new JScrollPane(textArea));
setSize(400, 350);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private String buildLongString(int length) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append("x");
}
return builder.toString();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new SSCCE();
}
});
}
}
Vous déposez vraiment 400 000 caractères de texte sur le malheureux utilisateur? Quel est le point de tout cela? –
Je ne vois aucune modification de code requise. – Arijit
Il est intéressant de noter que 'textArea.setLineWrap (true);' (indirectement pas sur appel) prend tout le temps. Mettre le texte là-bas est réellement rapide. BAs un exemple, en concaténant "x", si vous concaténer "x \ n" il devient vraiment rapide. – DSquare