我尝试使用Locale编写程序。我想用GraalVM本地编译该程序,但是Locale在本地编译后没有相同的行为。
我成功使用以下程序隔离了问题:
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Currency;
public class HelloWorld {
public static void main(String[] args) {
NumberFormat gbNumberFormat = NumberFormat.getCurrencyInstance(new Locale("en", "GB"));
gbNumberFormat.setCurrency(Currency.getInstance("USD"));
System.out.println(gbNumberFormat.format(1337));
NumberFormat usNumberFormat = NumberFormat.getCurrencyInstance(new Locale("en", "US"));
usNumberFormat.setCurrency(Currency.getInstance("USD"));
System.out.println(usNumberFormat.format(1337));
}
}
我可以用Java编译该程序:
javac -d out/ HelloWorld.java
(从外部目录)执行它:
java HelloWorld
结果是:
US$1,337.00
$1,337.00
我现在可以制作本机映像并启动它:
native-image -cp out/ HelloWorld
./helloworld
结果不一样:
$1,337.00
$1,337.00
好像我在纯模式下使用i18n遇到问题。我真的不明白为什么。 我正在使用graalvm-ce-java11-20.0.0,但是我已对具有相同行为的早期版本进行了测试。
如有必要,我随时为您服务。