2014-03-01 33 views
1

我開發了一個連接到Oracle(安裝在win上)的swing java應用程序。
當它試圖連接到數據庫獲取異常作爲「區域無法識別」。
爲了解決這個問題,我使用了下面的環境變量「JAVA_TOOLS_OPTIONS」。如何包括JAVA_TOOLS_OPTIONS到源

set JAVA_TOOL_OPTIONS=-Duser.language=en -Duser.region=us -Duser.country=us 

和我的應用程序運行良好。
如果我想發送給我的客戶,這將是一個問題。 我嘗試包括設置在我的應用程序如添加波紋管行主類

System.setProperty("user.language", "en"); 
System.setProperty("user.region", "us"); 
System.setProperty("user.country", "us"); 

,但不影響我又得到例外。
我該怎麼做?
謝謝

+1

['Locale.setDefault'](http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html #setDefault(java.util.Locale中))? – 2014-03-01 10:23:12

+0

效果不錯,謝謝 –

+0

很高興有幫助:) – 2014-03-01 11:56:21

回答

2

也許這會有所幫助:http://www.oracle.com/technetwork/java/javase/envvars-138887.html#gbmsy 對我來說,它看起來就像你不能使用System.setProperty()設置這些選項,因爲Java工具選項具有運行應用程序進行設置之前。 我建議這些

  • 一個寫一個shell腳本(* NIX/Linux)的與此類似:JAVA_TOOL_OPTIONS="-Duser.language=en -Duser.region=us -Duser.country=us" java -jar [your application]。我不知道這是否也適用於windows
  • 創建一個jar來啓動具有正確環境變量的應用程序,請參閱this question並告訴你的客戶 「只需啓動發射」
+0

在Windows應該創建一個bat文件。不好,並沒有那麼糟糕!謝謝 –

1

有可能你沒有足夠早地調用這些調用,並且使用它們的類已經被加載並初始化了。

一個很好的測試/快速修復方法是製作一個單獨的Main類,只調用這些調用,然後調用您當前使用的類來啓動您的應用程序。

您甚至可能需要在靜態初始化程序(不是main)中調用它們,因爲一旦執行main,它所引用的所有類將首先被​​加載。

你也可以使用反射從Main加載和執行你的類,這是一種混亂和可能不需要。

+0

我剛剛添加「公共靜態無效的主要(字符串[]參數)」的第一行「,但沒有工作! –

+0

這很不幸。它可能需要靜態初始化或反射,但由於它看起來像Locale.setDefault正在爲你工作,所以它可能不值得搞亂。 –