-
Bug
-
Resolution: Fixed
-
P4
-
None
-
b07
-
generic
-
Verified
An Exception is thrown by Formatter.format method when ICU4j locale spi is used
Exception in thread "main" java.lang.ClassCastException: com.ibm.icu.impl.jdkadapter.NumberFormatICU cannot be cast to java.base/java.text.DecimalFormat
at java.base/java.util.Formatter$FormatSpecifier.localizedMagnitude(Formatter.java:4481)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:3248)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:3233)
at java.base/java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2933)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2893)
at java.base/java.util.Formatter.format(Formatter.java:2674)
at java.base/java.util.Formatter.format(Formatter.java:2610)
public class FormatterTest {
public static void main(String[] args) {
Locale locale = new Locale("hi", "IN");
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb, locale);
formatter.format("%,d", 100000);
}
}
Ouput: A ClassCastException is thrown
Steps to Reproduce
1. Download icu libraries and put them in project classpath
http://download.icu-project.org/files/icu4j/59.1/icu4j-59_1.jar
http://download.icu-project.org/files/icu4j/59.1/icu4j-localespi-59_1.jar
2) Run above code snippet with VM argument
-Djava.locale.providers=SPI,COMPAT
Exception in thread "main" java.lang.ClassCastException: com.ibm.icu.impl.jdkadapter.NumberFormatICU cannot be cast to java.base/java.text.DecimalFormat
at java.base/java.util.Formatter$FormatSpecifier.localizedMagnitude(Formatter.java:4481)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:3248)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:3233)
at java.base/java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2933)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2893)
at java.base/java.util.Formatter.format(Formatter.java:2674)
at java.base/java.util.Formatter.format(Formatter.java:2610)
public class FormatterTest {
public static void main(String[] args) {
Locale locale = new Locale("hi", "IN");
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb, locale);
formatter.format("%,d", 100000);
}
}
Ouput: A ClassCastException is thrown
Steps to Reproduce
1. Download icu libraries and put them in project classpath
http://download.icu-project.org/files/icu4j/59.1/icu4j-59_1.jar
http://download.icu-project.org/files/icu4j/59.1/icu4j-localespi-59_1.jar
2) Run above code snippet with VM argument
-Djava.locale.providers=SPI,COMPAT