サポートされなくなったロケール設定を使用しようとしているベンダーアプレットがあります。
コンパイル解除されたコードは次のとおりです
String s1 = System.getProperty("java.version");
String s2 = System.getProperty("user.language");
String s;
if(s1.regionMatches(true, 0, "1.4", 0, 3))
s = System.getProperty("user.country");
else
s = System.getProperty("user.region");
m_Locale = new Locale(s2, s);
問題は、クライアントマシン上の他のアプリケーションがJRE1.5以降を必要とすることです。
したがって、行if(s1.regionMatches(true、0、 "1.4"、0、3))は常にelseにキックインしています
s = System.getProperty("user.region"); always returns null in JRE 1.4 or higher.
したがって、新しいロケール(s2、s);
nullポインタをスローするnullパラメータで呼び出されています。
このコードは、user.regionが有効なシステムプロパティである古いJRE、つまり1.1と1.3をサポートするためにかなり前に導入されたことを知っています。
私の見方には2つの選択肢があります。
ベンダーに働きかけ、アップグレードにお金を使うように言わずに修正してくれることを願っています。
修正を加えてコードを再コンパイルし、自分の証明書を使用してjarに再署名します。そして、おそらくライセンス/サポート契約を破ります。
それとも彼らの3番目の選択肢ですか?コード自体で設定せずにJavaでシステムプロパティを設定する方法は見たことがありません。方法はありますか?クライアントマシンにファイルをプッシュする必要がある場合は、クライアントマシンに完全にアクセスできます。cmd line argを使用したり、コードで変更したりせずに、デフォルトのJavaシステムプロパティを追加または変更する方法がわかりません。