exception - JavaFX TextArea with listener gives: “java.lang.IllegalArgumentException: The start must be <= the end” -
i getting exception when trying change text in text property listener. exception same this question. used textarea instead of textfield, think source of bug same. it's in "textinputcontrol.java". seems java 8's bug.
@fxml private textarea ta; ta.settext("12-"); // pre-set text ta.textproperty().addlistener((observable, oldvalue, newvalue) -> { ta.settext("1"); // changed text }); this causes exception on machine. have jdk 1.8.0_51 on win 7 64-bit. however, dosen't cause exception if switch jdk 1.8.0_25.
i tired range of "pre-set text" , "changed text" combinations , found that, generally, if it's more cause exception when length of "changed text" short "pre-set text".
is there workaround issue? or did make mistakes somewhere?
thanks help.
edit: following code reproduce issue. tested jre 8u60, , issue still exists.
public class main extends application { @override public void start(stage primarystage) { try { textarea ta = new textarea(); ta.settext("12-"); // pre-set text ta.textproperty().addlistener((observable, oldvalue, newvalue) -> { ta.settext("1"); // changed text }); anchorpane root = new anchorpane(); root.getchildren().addall(ta); scene scene = new scene(root,400,400); primarystage.setscene(scene); primarystage.show(); } catch(exception e) { e.printstacktrace(); } } public static void main(string[] args) { launch(args); } } after creating window, textarea show "12-". trying insert character anywhere, textarea change "1" following exception produced:
exception in thread "javafx application thread" java.lang.illegalargumentexception: start must <= end @ javafx.scene.control.textinputcontrol.gettext(textinputcontrol.java:446) @ javafx.scene.control.textinputcontrol.updatecontent(textinputcontrol.java:564) @ javafx.scene.control.textinputcontrol.replacetext(textinputcontrol.java:548) @ com.sun.javafx.scene.control.behavior.textareabehavior.replacetext(textareabehavior.java:305) @ com.sun.javafx.scene.control.behavior.textinputcontrolbehavior.defaultkeytyped(textinputcontrolbehavior.java:238) @ com.sun.javafx.scene.control.behavior.textinputcontrolbehavior.callaction(textinputcontrolbehavior.java:139) @ com.sun.javafx.scene.control.behavior.textareabehavior.callaction(textareabehavior.java:259) @ com.sun.javafx.scene.control.behavior.behaviorbase.callactionforevent(behaviorbase.java:218) @ com.sun.javafx.scene.control.behavior.textinputcontrolbehavior.callactionforevent(textinputcontrolbehavior.java:127) @ com.sun.javafx.scene.control.behavior.behaviorbase.lambda$new$74(behaviorbase.java:135) @ com.sun.javafx.event.compositeeventhandler$normaleventhandlerrecord.handlebubblingevent(compositeeventhandler.java:218) @ com.sun.javafx.event.compositeeventhandler.dispatchbubblingevent(compositeeventhandler.java:80) @ com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:238) @ com.sun.javafx.event.eventhandlermanager.dispatchbubblingevent(eventhandlermanager.java:191) @ com.sun.javafx.event.compositeeventdispatcher.dispatchbubblingevent(compositeeventdispatcher.java:59) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:58) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.java:56) @ com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:114) @ com.sun.javafx.event.eventutil.fireeventimpl(eventutil.java:74) @ com.sun.javafx.event.eventutil.fireevent(eventutil.java:54) @ javafx.event.event.fireevent(event.java:198) @ javafx.scene.scene$keyhandler.process(scene.java:3964) @ javafx.scene.scene$keyhandler.access$1800(scene.java:3910) @ javafx.scene.scene.impl_processkeyevent(scene.java:2040) @ javafx.scene.scene$scenepeerlistener.keyevent(scene.java:2501) @ com.sun.javafx.tk.quantum.glassvieweventhandler$keyeventnotification.run(glassvieweventhandler.java:197) @ com.sun.javafx.tk.quantum.glassvieweventhandler$keyeventnotification.run(glassvieweventhandler.java:147) @ java.security.accesscontroller.doprivileged(native method) @ com.sun.javafx.tk.quantum.glassvieweventhandler.lambda$handlekeyevent$354(glassvieweventhandler.java:228) @ com.sun.javafx.tk.quantum.quantumtoolkit.runwithoutrenderlock(quantumtoolkit.java:389) @ com.sun.javafx.tk.quantum.glassvieweventhandler.handlekeyevent(glassvieweventhandler.java:227) @ com.sun.glass.ui.view.handlekeyevent(view.java:546) @ com.sun.glass.ui.view.notifykey(view.java:966) @ com.sun.glass.ui.win.winapplication._runloop(native method) @ com.sun.glass.ui.win.winapplication.lambda$null$149(winapplication.java:191) @ java.lang.thread.run(thread.java:745) clearing before changing text doesn't either because clearing text, ie. ta.clear();, cause same exception. ideas? there jira ticket already?
to me seems bug. wouldnt first time happens 1 version other. of time have @ javafx jira , see if there open issues. didnt find @ point. workaround suggest use component, label instead of textarea if want display text.
edit:
have at:
Comments
Post a Comment