سؤال

أنا مواجهة مشكلة عندما أحتاج إلى توزيع تطبيق Java الخاص بي، تم إنشاؤه باستخدام NetBeans 6.8. لدي بعض ملفات الترجمة المصنوعة من Gettext كملفات فئة - مصنوعة من MSGFMT من حزمة Gettext باستخدام البرنامج النصي التالي (تشغيل البرنامج النصي Shell ضمن MSYS - لا توجد مشاكل هنا)

PO_FILES=`find . -iname "*_*.po"`
rm -f *.class

for PO_FILE in $PO_FILES; do
  CLASS_NAME=`echo $PO_FILE | sed "s/\.po$//" | sed "s/^.*\///"`
  echo "Compiling $PO_FILE to class $CLASS_NAME"
  msgfmt --java2 $PO_FILE -r $CLASS_NAME -d .
done

هنا هيكل الدليل:

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)

يحتوي ملف البيان على مسار الفصل الدراسي التالي:

lib/xxx.jar ... lib/translate ... lib/yyy.jar (jar files are not the problem)

يعمل التطبيق دون أي مشكلة باستثناء ملفات الترجمة التي لا يمكن تحميلها. الجزء Loading هو التالي (العميل يريد ترجمة فرنسية):

Locale.setDefault(Locale.FRANCE);
myResources = ResourceBundle.getBundle("Messages");

ملاحظة: تظهر هذه المشكلة فقط عند محاولة تشغيل ملف Jar (يعمل من NetBeans يعمل بشكل جيد، تشغيل من سطر الأوامر تعمل الفئات المترجمة أيضا ولكن ليس عند تشغيل ملف JAR (Java -jar Main.jar).

الجزء المضحك هو أنني لا أملك هذه المشكلة إذا قمت بتعديل مسار الفصل من ملف البيان وإضافة "." المسار إلى ClassPath ولديه هيكل الدليل هذا:

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)
Messages_fr$1.class
Messages_fr.class

أنا أستخدم Windows مع إصدارات Java التالية:

C:\>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

D:\Program Files\Java\jdk1.6.0_17\bin>java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

أنا أقدر أي مساعدة لأن هذا يصبح محبطا.

شكرا لك،

إيوالي

هل كانت مفيدة؟

المحلول

كانت المشكلة الفعلية (كما هو موضح في التعليقات) مفقودة / في مسار الفصل من ملف جرة. على سبيل المثال وجود المسار فقط مثل هذا: المسار / mypath لم يكن كافيا. كنت بحاجة لإضافة A / (مسار / myPath /) لجعلها تعمل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top