6

次のコードは、私の問題を説明するのに役立ちます。

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ロケールを取得していますが、m / cロケールがfr_BEに設定されていても、常にen_USとして表示されます。

上記のコードの出力は次のとおりです。これは、Java1.7.0_09でコンパイルおよび実行されます。

en_US
java-version-1.7.0_09
prop:true
getLocale-en_US

このように何が原因であるかについての考えはありますか?よろしくお願いします。

4

1 に答える 1

4

JVM を起動する前に、そのシステム プロパティを設定する必要があります。コマンドライン引数を介してこれを行うことができます:

java -Dsun.locale.formatasdefault=true TargetClass

または、JVM の起動を制御しない環境では、_JAVA_OPTIONS環境変数を介して設定できます。

  • *ニックス

    export _JAVA_OPTIONS=-Dsun.locale.formatasdefault=true
    
  • ウィンドウズ

    SET _JAVA_OPTIONS=-Dsun.locale.formatasdefault=true
    

Windows で、その CMD だけでなくシステム全体に変更を適用する場合は、Windows システム変数 JAVA_TOOL_OPTIONS を作成します。

于 2012-11-29T12:16:18.850 に答える