在Java 7中将sun.locale.formatasdefault设置为true

在Java 7中将sun.locale.formatasdefault设置为true,java,java-7,Java,Java 7,以下代码将有助于说明我的问题: import java.util.Locale; import java.text.*; public class LocaleTest { public static void main(String[] args) { System.out.println(Locale.getDefault()); System.out.println("java-version-" +System.getProperty("java.vers

以下代码将有助于说明我的问题:

import java.util.Locale;
import java.text.*;

public class LocaleTest {
   public static void main(String[] args) {
      System.out.println(Locale.getDefault());
      System.out.println("java-version-" +System.getProperty("java.version"));
      System.setProperty("sun.locale.formatasdefault","true");
      System.out.println("prop:" +System.getProperty("sun.locale.formatasdefault"));
      System.out.println("getLocale-" +Locale.getDefault());
   }
}
正如我们所知,Java 7中的Locale.getDefault()中存在错误。但是根据Oracle的建议,我已将系统属性“sun.Locale.formatasdefault”设置为true。尽管我现在得到了我的m/c语言环境,但它始终显示为en_US,即使我的m/c语言环境设置为fr_BE

以下是在Java 1.7.0_09上编译和运行的上述代码的输出:

en_US java-version-1.7.0_09 prop:true getLocale-en_US 恩努斯 java-version-1.7.0_09 道具:真的 getLocale-en_US
你有没有想过是什么导致了这样的结果?非常感谢。

您需要在启动JVM之前设置该系统属性。可以通过命令行参数执行此操作:

java -Dsun.locale.formatasdefault=true TargetClass
或者在不控制JVM启动的环境中,可以通过
\u JAVA\u OPTIONS
环境变量设置JVM:

  • *Nix

    export _JAVA_OPTIONS=-Dsun.locale.formatasdefault=true
    
  • 窗口

    SET _JAVA_OPTIONS=-Dsun.locale.formatasdefault=true
    

在Windows中,如果您希望更改不仅应用于该CMD,还应用于系统范围,请创建Windows系统变量JAVA_TOOL_OPTIONS

谢谢您的回复,能否请您详细说明如何在启动JVM之前设置系统属性。如果我以java-Dsun.locale.formatasdefault=true className的形式运行程序,那么它就可以工作。我需要在有多个类的应用程序上执行此操作,然后说明如何执行此操作。这正是您在启动前指定属性的方式。您也可以在启动程序或IDE之前在您的环境中设置属性,甚至在IDEPerception中的每个程序级别上设置属性。感谢您的理解,我非常接近答案,但对此没有什么混淆,因此,请您详细说明如何在环境属性中设置sun.locale.formataadefault=true Windows,即需要更改哪个文件。以下是如何在Windows上设置环境变量,希望这有帮助-设置环境变量没有任何效果。但是,您可以使用
\u JAVA\u OPTIONS
环境变量:
set\u JAVA\u OPTIONS=-Dsun.locale.formatasdefault=true
。更多信息,请参阅。