Hallo zusammen,
ich habe ein Problem mit einem JTextField. Dazu passend mal folgender Sourcecode Ausschnitt:
In der Problemzeile bekomme ich immer eine Exception:
java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:644)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1693)
at produktion.ap662ff.fenster.Funktionstest.aenderungTextBox(Funktionstest.java:1464)
at produktion.ap662ff.fenster.Funktionstest.insertUpdate(Funktionstest.java:1404)
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.PlainDocument.insertString(PlainDocument.java:114)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1351)
at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:859)
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)
Soweit ich das verstehe ist das Textfeld gesperrt, wenn ich mich gerade in dem passenden Listener befinde. Ich kann also nichts rein schreiben.
Ich muss das Feld aber nun löschen, stehe da gerade ziemlich auf dem Schlauch.
Gibt es da eine andere Möglichkeit den Inhalt zu löschen?
Kann mir da vielleicht jemand einen Tip geben wie ich das ganze machen kann?
Mir ist spontan eingefallen einen Timer zu starten, der 100 Millisekunden danach das Feld löscht, wenn ich aus dem Listener raus bin, aber irgendwie kommt mir das auch nicht als beste Lösung vor.
ich habe ein Problem mit einem JTextField. Dazu passend mal folgender Sourcecode Ausschnitt:
Java:
private JTextField teilenummer;
...
private void fuelleFenster()
{
...
teilenummer = new JTextField();
teilenummer.setFont(new Font("SansSerif", Font.PLAIN, 24));
teilenummer.setSize(200, 30);
teilenummer.setLocation(300, 50);
teilenummer.getDocument().addDocumentListener(this);
...
}
public final void insertUpdate(DocumentEvent e)
{
aenderungTextBox();
}
public final void removeUpdate(DocumentEvent e)
{
aenderungTextBox();
}
private final void aenderungTextBox()
{
...
teilenummer.setText(""); // Problemzeile
teilenummer.grabFocus();
...
}
In der Problemzeile bekomme ich immer eine Exception:
java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:644)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1693)
at produktion.ap662ff.fenster.Funktionstest.aenderungTextBox(Funktionstest.java:1464)
at produktion.ap662ff.fenster.Funktionstest.insertUpdate(Funktionstest.java:1404)
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.PlainDocument.insertString(PlainDocument.java:114)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1351)
at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:859)
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)
Soweit ich das verstehe ist das Textfeld gesperrt, wenn ich mich gerade in dem passenden Listener befinde. Ich kann also nichts rein schreiben.
Ich muss das Feld aber nun löschen, stehe da gerade ziemlich auf dem Schlauch.
Gibt es da eine andere Möglichkeit den Inhalt zu löschen?
Kann mir da vielleicht jemand einen Tip geben wie ich das ganze machen kann?
Mir ist spontan eingefallen einen Timer zu starten, der 100 Millisekunden danach das Feld löscht, wenn ich aus dem Listener raus bin, aber irgendwie kommt mir das auch nicht als beste Lösung vor.