وقتی از جاوای ۸ به جاوای ۱۰ مهاجرت کردم، زمانی که میخواستم پروژه رو اجرا کنم با خطای عجیب NumberFormatException روبرو میشدم؛ دقت که کردم دیدم تاریخ لاگها توی کنسول با ارقام فارسی نوشته میشه (توی cmd که علامت سوال میافتاد).
سری اول که یه چرخی توی گوگل زدم هیچ سرنخی نتونستم پیدا کنم و دوباره برگشتم به جاوای ۸؛ راستش اون موقع خیلیم انگیزه نداشتم برم روی جاوای جدیدتر! بعدتر که جاوای ۱۱ اومد و پایدار شد (و کلیدواژهی دوست داشتنی var اضافه شد)، گفتم لابد این مشکل حل شده و تصمیم گرفتم پروژههای جدید رو با جاوای ۱۱ بزنم.
اما کماکان مشکل وجود داشت :(
این سری که با جدیت بیشتری تو گوگل چرخ زدم فهمیدم که توی جاوای ۹ به بعد، Locale Provider های جاوا، تغییر کرده و به صورت پیشفرض از فرمت تعریف شده توی سیستم عامل استفاده میکنه و از اونجایی که فرمت ویندوز من روی فارسی تنظیم شده بود این مشکل به وجود میاومد.
خب با تغییر فرمت به انگلیسی مشکل حل میشه اما راه حل مطلوبی نیست!
به سه روش میشه Locale Provider رو تغییر داد:
توی این روش کافیه وقتی از دستور java استفاده میکنید، بلافاصله بعدش این رو اضافه کنید:
-Djava.locale.providers=COMPAT
به عنوان مثال:
java -Djava.locale.providers=COMPAT -jar file.jar
اگر از IntelliJ استفاده میکنید میتونید آرگومان گفته شده رو در قسمت زیر اضافه کنید:
Run --> Edit Configurations --> VM Options
خودم روش قبلی رو وقتی از Maven استفاده کردم نتونستم اعمال کنم؛ اما با اضافه کردن دستور پایین به تابع main، جواب گرفتم:
System.setProperty("java.locale.providers", "COMPAT");
با اجرای این دستور در CMD (به صورت admin)، یه متغیر در System Environment Variables تنظیم میشه و تمامی نرمافزارهایی که با جاوا اجرا میشن Locale Providerشون تغییر میکنه.
setx _JAVA_OPTIONS "-Djava.locale.providers=COMPAT" /M
امیدوارم روشهای گفته شده به کارتون بیاد؛ باز اگه راه بهتری سراغ داشتید بگید ممنون میشم. ✋