2016-09-13 6 views
0

Ich versuche, ausgewählten Text von einem JTextField zu erhalten. Ich habe die Funktion .getHighlighter() gefunden und es funktioniert. Ich bekomme den gewünschten Text, aber es bleibt die Ausnahme für das Werfen und den Index außerhalb des gültigen Bereichs. Kann mir jemand sagen warum?java.lang.ArrayIndexOutOfBoundsException mit Textmarker

PS: Ich habe auch versucht zu überprüfen, ob h! = Null und h [0]! = Null. Gleiches Ergebnis.

private void jTextField1MouseDragged(java.awt.event.MouseEvent evt) {           
    Highlight[] h = jTextField1.getHighlighter().getHighlights(); 
    jLabel2.setText("Selected text: " + jTextField1.getText().substring(h[0].getStartOffset(), h[0].getEndOffset())); 
} 

Ausnahme:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 
at interfacesprueba1.Ej3b.jTextField1MouseDragged(Ej3b.java:110) 
at interfacesprueba1.Ej3b.access$000(Ej3b.java:14) 
at interfacesprueba1.Ej3b$1.mouseDragged(Ej3b.java:42) 
at java.awt.AWTEventMulticaster.mouseDragged(AWTEventMulticaster.java:320) 
at java.awt.Component.processMouseMotionEvent(Component.java:6583) 
at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3342) 
at java.awt.Component.processEvent(Component.java:6304) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+0

Bitte senden Sie Werte von 'jTextField1.getText()', 'h [0]. getStartOffset() 'und' h [0] .getEndOffset() ' –

+0

Haben Sie überprüft, ob es irgendwelche Highlights gibt? 'h.length> 0' –

+0

Ich habe gerade h.length ausprobiert und es funktioniert nicht. Die geforderten Werte sind QWERTY, 2,3 (wobei E in der QUERTY ausgewählt ist). –

Antwort

1

Sie müssen auch Array-Länge überprüfen, wie diese

private void jTextField1MouseDragged(java.awt.event.MouseEvent evt) { 
     Highlight[] h = jTextField1.getHighlighter().getHighlights(); 
     if (h != null && h.length > 0) { 
      jLabel2.setText(
        "Selected text: " + jTextField1.getText().substring(h[0].getStartOffset(), h[0].getEndOffset())); 
     } 
    } 
+0

Ich glaube nicht, dass die [Methode] (https://docs.oracle.com/javase/7/docs/api/javax/swing/text/Highlighter.html#getHighlights()) jemals "null" zurückgibt. – ChiefTwoPencils

+0

ya können wir direkt auf Länge überprüfen, ich habe nur Null überprüfen für die sichere Seite :) –

+0

Gleiche Ausnahme. –

Verwandte Themen