Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8258381

[macos] Exception when input emoji using Chinese input method

XMLWordPrintable

        ADDITIONAL SYSTEM INFORMATION :
        OS:
        macOs Big Sur, 11.0.1

        java version:
        openjdk version "15" 2020-09-15
        OpenJDK Runtime Environment Zulu15.27+17-CA (build 15+36)
        OpenJDK 64-Bit Server VM Zulu15.27+17-CA (build 15+36, mixed mode, sharing)

        openjfx version:
        15.0.1

        A DESCRIPTION OF THE PROBLEM :
        Input any emoji using Chinese input method in JavaFX text area, an exception is thrown:

        Exception in thread "JavaFX Application Thread" java.lang.StringIndexOutOfBoundsException: begin 0, end 2, length 1
        at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3734)
        at java.base/java.lang.String.substring(String.java:1903)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleInputMethodEvent$7(GlassViewEventHandler.java:647)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleInputMethodEvent$8(GlassViewEventHandler.java:640)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleInputMethodEvent(GlassViewEventHandler.java:639)
        at javafx.graphics/com.sun.glass.ui.View.handleInputMethodEvent(View.java:648)
        at javafx.graphics/com.sun.glass.ui.View.notifyInputMethod(View.java:977)
        at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyInputMethodMac(MacView.java:161)

        Seems that the notify str only contains the first byte of UTF-8 encoded emoji bytes.

        Copy & Paste a emoji to text field works fine.

        STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
        1. Create a simple JavaFX app with a TextArea, and Run:

        public class Test extends Application {

            @Override
            public void start(Stage stage) {
                stage.setTitle("Test");
                var text = new TextArea();
                var scene = new Scene(text, 600, 400);
                stage.setScene(scene);
                stage.show();
            }

            public static void main(String[] args) {
                launch(args);
            }
        }

        2. Input text using ‘简体拼音’ or any other Chinese input method, for example, keys 'keai' and then select the emoji in the candidate words.


          1. Test.java
            0.6 kB
            Praveen Narayanaswamy

              kcr Kevin Rushforth
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: