FULL PRODUCT VERSION :
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
also test on :
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin codetekiiMac.local 14.5.0 Darwin Kernel Version 14.5.0: Thu Apr 21 20:40:54 PDT 2016; root:xnu-2782.50.3~1/RELEASE_X86_64 x86_64
EXTRA RELEVANT SYSTEM CONFIGURATION :
OSX 10.10.5
A DESCRIPTION OF THE PROBLEM :
When I input chinese with QQ pinyin(http://qq.pinyin.cn/) in textfield of javafx, it didn't work!
when I delete a char in the textfield, I got this error:
Exception in thread "JavaFX Application Thread" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:906)
at java.lang.StringBuilder.substring(StringBuilder.java:76)
at javafx.scene.control.TextField$TextFieldContent.get(TextField.java:79)
at javafx.scene.control.TextInputControl.getText(TextInputControl.java:454)
at javafx.scene.control.TextInputControl.updateContent(TextInputControl.java:564)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:548)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:510)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.handleInputMethodEvent(TextInputControlSkin.java:511)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.lambda$new$191(TextInputControlSkin.java:376)
at com.sun.javafx.scene.control.skin.TextInputControlSkin$$Lambda$245/620564596.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8390)
at javafx.scene.Scene.processInputMethodEvent(Scene.java:2115)
at javafx.scene.Scene.access$4400(Scene.java:159)
at javafx.scene.Scene$ScenePeerListener.inputMethodEvent(Scene.java:2512)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$null$355(GlassViewEventHandler.java:545)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$338/911696943.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleInputMethodEvent$356(GlassViewEventHandler.java:537)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$337/680924793.get(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:404)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleInputMethodEvent(GlassViewEventHandler.java:536)
at com.sun.glass.ui.View.handleInputMethodEvent(View.java:647)
at com.sun.glass.ui.View.notifyInputMethod(View.java:962)
at com.sun.glass.ui.mac.MacView.notifyInputMethodMac(MacView.java:131)
while, if I only input English, it worked fine.
This problem only occur on Mac and my environment is OSX 10.10.5, Java 1.8.0_51.
I test with textfield of Swing, it all works, no matter when I input Chinese or input English.
I also asked a question on SO (http://stackoverflow.com/questions/38563918/javafx-textfiled-can-not-input-chinese-when-using-qq-pinyin).
REGRESSION. Last worked in version 8u102
ADDITIONAL REGRESSION INFORMATION:
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
first, download QQ pinyin from http://qq.pinyin.cn/
second, install the QQ pinyin
third, switch to QQ pinyin
then input some chinese.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Cann't input Chinses in the javafx textfield.When you press the backspace key, you will get the exception.
ACTUAL -
Exception in thread "JavaFX Application Thread" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:906)
at java.lang.StringBuilder.substring(StringBuilder.java:76)
at javafx.scene.control.TextField$TextFieldContent.get(TextField.java:79)
at javafx.scene.control.TextInputControl.getText(TextInputControl.java:454)
at javafx.scene.control.TextInputControl.updateContent(TextInputControl.java:564)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:548)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:510)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.handleInputMethodEvent(TextInputControlSkin.java:511)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.lambda$new$191(TextInputControlSkin.java:376)
at com.sun.javafx.scene.control.skin.TextInputControlSkin$$Lambda$245/620564596.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8390)
at javafx.scene.Scene.processInputMethodEvent(Scene.java:2115)
at javafx.scene.Scene.access$4400(Scene.java:159)
at javafx.scene.Scene$ScenePeerListener.inputMethodEvent(Scene.java:2512)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$null$355(GlassViewEventHandler.java:545)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$338/911696943.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleInputMethodEvent$356(GlassViewEventHandler.java:537)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$337/680924793.get(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:404)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleInputMethodEvent(GlassViewEventHandler.java:536)
at com.sun.glass.ui.View.handleInputMethodEvent(View.java:647)
at com.sun.glass.ui.View.notifyInputMethod(View.java:962)
at com.sun.glass.ui.mac.MacView.notifyInputMethodMac(MacView.java:131)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
/**
* Created by code on 16/7/25.
*/
public class Test extends Application{
@Override
public void init() throws Exception {
}
@Override
public void start(Stage primaryStage) {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
System.out.println("java.specification.version:" + ManagementFactory.getRuntimeMXBean().getSpecVersion());
System.out.println("java.vm.version:" + ManagementFactory.getRuntimeMXBean().getVmVersion());
System.out.println("sun.arch:" + System.getProperty("sun.arch.data.model"));
Label label1 = new Label("Name:");
TextField textField = new TextField ();
HBox hb = new HBox();
hb.getChildren().addAll(label1, textField);
hb.setSpacing(10);
Scene scene = new Scene(hb);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
---------- END SOURCE ----------
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
also test on :
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin codetekiiMac.local 14.5.0 Darwin Kernel Version 14.5.0: Thu Apr 21 20:40:54 PDT 2016; root:xnu-2782.50.3~1/RELEASE_X86_64 x86_64
EXTRA RELEVANT SYSTEM CONFIGURATION :
OSX 10.10.5
A DESCRIPTION OF THE PROBLEM :
When I input chinese with QQ pinyin(http://qq.pinyin.cn/) in textfield of javafx, it didn't work!
when I delete a char in the textfield, I got this error:
Exception in thread "JavaFX Application Thread" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:906)
at java.lang.StringBuilder.substring(StringBuilder.java:76)
at javafx.scene.control.TextField$TextFieldContent.get(TextField.java:79)
at javafx.scene.control.TextInputControl.getText(TextInputControl.java:454)
at javafx.scene.control.TextInputControl.updateContent(TextInputControl.java:564)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:548)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:510)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.handleInputMethodEvent(TextInputControlSkin.java:511)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.lambda$new$191(TextInputControlSkin.java:376)
at com.sun.javafx.scene.control.skin.TextInputControlSkin$$Lambda$245/620564596.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8390)
at javafx.scene.Scene.processInputMethodEvent(Scene.java:2115)
at javafx.scene.Scene.access$4400(Scene.java:159)
at javafx.scene.Scene$ScenePeerListener.inputMethodEvent(Scene.java:2512)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$null$355(GlassViewEventHandler.java:545)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$338/911696943.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleInputMethodEvent$356(GlassViewEventHandler.java:537)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$337/680924793.get(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:404)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleInputMethodEvent(GlassViewEventHandler.java:536)
at com.sun.glass.ui.View.handleInputMethodEvent(View.java:647)
at com.sun.glass.ui.View.notifyInputMethod(View.java:962)
at com.sun.glass.ui.mac.MacView.notifyInputMethodMac(MacView.java:131)
while, if I only input English, it worked fine.
This problem only occur on Mac and my environment is OSX 10.10.5, Java 1.8.0_51.
I test with textfield of Swing, it all works, no matter when I input Chinese or input English.
I also asked a question on SO (http://stackoverflow.com/questions/38563918/javafx-textfiled-can-not-input-chinese-when-using-qq-pinyin).
REGRESSION. Last worked in version 8u102
ADDITIONAL REGRESSION INFORMATION:
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
first, download QQ pinyin from http://qq.pinyin.cn/
second, install the QQ pinyin
third, switch to QQ pinyin
then input some chinese.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Cann't input Chinses in the javafx textfield.When you press the backspace key, you will get the exception.
ACTUAL -
Exception in thread "JavaFX Application Thread" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:906)
at java.lang.StringBuilder.substring(StringBuilder.java:76)
at javafx.scene.control.TextField$TextFieldContent.get(TextField.java:79)
at javafx.scene.control.TextInputControl.getText(TextInputControl.java:454)
at javafx.scene.control.TextInputControl.updateContent(TextInputControl.java:564)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:548)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:510)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.handleInputMethodEvent(TextInputControlSkin.java:511)
at com.sun.javafx.scene.control.skin.TextInputControlSkin.lambda$new$191(TextInputControlSkin.java:376)
at com.sun.javafx.scene.control.skin.TextInputControlSkin$$Lambda$245/620564596.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8390)
at javafx.scene.Scene.processInputMethodEvent(Scene.java:2115)
at javafx.scene.Scene.access$4400(Scene.java:159)
at javafx.scene.Scene$ScenePeerListener.inputMethodEvent(Scene.java:2512)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$null$355(GlassViewEventHandler.java:545)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$338/911696943.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleInputMethodEvent$356(GlassViewEventHandler.java:537)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$337/680924793.get(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:404)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleInputMethodEvent(GlassViewEventHandler.java:536)
at com.sun.glass.ui.View.handleInputMethodEvent(View.java:647)
at com.sun.glass.ui.View.notifyInputMethod(View.java:962)
at com.sun.glass.ui.mac.MacView.notifyInputMethodMac(MacView.java:131)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
/**
* Created by code on 16/7/25.
*/
public class Test extends Application{
@Override
public void init() throws Exception {
}
@Override
public void start(Stage primaryStage) {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
System.out.println("java.specification.version:" + ManagementFactory.getRuntimeMXBean().getSpecVersion());
System.out.println("java.vm.version:" + ManagementFactory.getRuntimeMXBean().getVmVersion());
System.out.println("sun.arch:" + System.getProperty("sun.arch.data.model"));
Label label1 = new Label("Name:");
TextField textField = new TextField ();
HBox hb = new HBox();
hb.getChildren().addAll(label1, textField);
hb.setSpacing(10);
Scene scene = new Scene(hb);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
---------- END SOURCE ----------