ArrayIndexOutOfBoundsException et JTextPane
Bonjour,
Je suis tombé sur un problème bizarre : j'obtiens une exception ArrayIndexOutOfBoundsException en collant un texte particulier dans un simple JTextPane.
J'ai fait un tout petit exemple qui permet de reproduire le problème : la classe crée une simple JFrame avec un JTextPane vide. Quand je copie un texte particulier (des caractères Unicode un peu particuliers) dans le JTextPane, j'obtiens l'ArrayIndexOutOfBoundsException.
Le texte que j'essaye de copier ressemble à [[ml:ഇംഗ്ലണ്ട്* ഫുട്ബോൾ ടീം]] (mais il faut récupérer le texte original sur http://fr.wikipedia.org/w/index.php?...on&action=edit car le copier/coller du texte dans le forum a l'air de le modifier et le problème ne se produit plus avec ce texte modifié...)
Le point clé semble l'appel à UIManager.setLookAndFeel() : sans, ça marche.
Quelqu'un aurait une idée ?
J'ai ouvert aussi un post sur le forum Java: http://forums.sun.com/thread.jspa?th...45189&tstart=0
Mon PC est sous Windows XP SP3, Java 6
Code:
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
| package org.wikipediacleaner.gui.swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
/**
* Simple test with JTextPane
*/
public class JTextPaneTest extends JPanel {
private static final long serialVersionUID = 6426424812124490870L;
private JTextPane textNewSection;
public JTextPaneTest() {
setLayout(new BorderLayout());
add(createTextPane(), BorderLayout.CENTER);
}
private Component createTextPane() {
textNewSection = new JTextPane();
textNewSection.setBackground(Color.WHITE);
textNewSection.setEditable(true);
JScrollPane scrollContents = new JScrollPane(textNewSection);
scrollContents.setMinimumSize(new Dimension(100, 100));
scrollContents.setPreferredSize(new Dimension(1000, 500));
scrollContents.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
return scrollContents;
}
static void createAndShowGui() {
JFrame frame = new JFrame("JTextPane test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JTextPaneTest());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
// TODO
} catch (InstantiationException e) {
// TODO
} catch (IllegalAccessException e) {
// TODO
} catch (UnsupportedLookAndFeelException e) {
// TODO
}
createAndShowGui();
}
});
}
} |
Code:
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
| Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 234
at sun.font.ExtendedTextSourceLabel.getLineBreakIndex(ExtendedTextSourceLabel.java:442)
at java.awt.font.TextMeasurer.calcLineBreak(TextMeasurer.java:308)
at java.awt.font.TextMeasurer.getLineBreakIndex(TextMeasurer.java:544)
at java.awt.font.LineBreakMeasurer.nextOffset(LineBreakMeasurer.java:340)
at java.awt.font.LineBreakMeasurer.nextLayout(LineBreakMeasurer.java:422)
at javax.swing.text.TextLayoutStrategy.sync(TextLayoutStrategy.java:298)
at javax.swing.text.TextLayoutStrategy.insertUpdate(TextLayoutStrategy.java:52)
at javax.swing.text.FlowView.loadChildren(FlowView.java:126)
at javax.swing.text.CompositeView.setParent(CompositeView.java:122)
at javax.swing.text.FlowView.setParent(FlowView.java:272)
at javax.swing.text.CompositeView.replace(CompositeView.java:200)
at javax.swing.text.BoxView.replace(BoxView.java:164)
at javax.swing.text.CompositeView.loadChildren(CompositeView.java:97)
at javax.swing.text.CompositeView.setParent(CompositeView.java:122)
at javax.swing.plaf.basic.BasicTextUI$RootView.setView(BasicTextUI.java:1315)
at javax.swing.plaf.basic.BasicTextUI.setView(BasicTextUI.java:681)
at javax.swing.plaf.basic.BasicTextUI.modelChanged(BasicTextUI.java:670)
at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1841)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:185)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:734)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:693)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
at javax.swing.JTextPane.replaceSelection(JTextPane.java:178)
at javax.swing.JTextPane.replaceSelection(JTextPane.java:162)
at javax.swing.plaf.basic.BasicTextUI$TextTransferHandler.handleReaderImport(BasicTextUI.java:2341)
at javax.swing.plaf.basic.BasicTextUI$TextTransferHandler.importData(BasicTextUI.java:2482)
at javax.swing.TransferHandler.importData(TransferHandler.java:745)
at javax.swing.plaf.basic.BasicTextUI$TextTransferHandler.importData(BasicTextUI.java:2419)
at javax.swing.TransferHandler$TransferAction.actionPerformed(TransferHandler.java:1655)
at javax.swing.text.JTextComponent.invokeAction(JTextComponent.java:1485)
at javax.swing.text.JTextComponent.paste(JTextComponent.java:1463)
at javax.swing.text.DefaultEditorKit$PasteAction.actionPerformed(DefaultEditorKit.java:1337)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2844)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2879)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2807)
at java.awt.Component.processEvent(Component.java:5815)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:693)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:958)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:830)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:657)
at java.awt.Component.dispatchEventImpl(Component.java:4282)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) |