j2me midlet استثناء: IoException Reading Reader Indialid First Byte
سؤال
عندما أقوم بتشغيل Midlet الخاص بي مع مجموعة أدوات Java Wireless ، تعمل Midlet بشكل صحيح ، ولكن عندما تحاول تحليل ملعب Textfield ، يحدث الخطأ التالي ؛
java.lang.RuntimeException: IOException reading reader invalid first byte 10010111
at com.sun.cldc.i18n.Helper.byteToCharArray(+228)
at com.sun.cldc.i18n.Helper.byteToCharArray(+9)
at java.lang.String.<init>(+7)
at z.a(+219)
at z.a(+103)
at DP4JPhone.a(+74)
at DP4JPhone.a(+115)
at DP4JPhone.commandAction(+120)
at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+186)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)
ما المشكلة؟
أنا أستخدم JWT 2.5.2_01
المحلول
تم حل المشكلة.
كما ذكر ماكدويل من قبل ، كانت المشكلة حول ترميز الإعدادات. أفضل طريقة للتغلب على هذه المشكلة هي إعلان تشفير المعلومات من WTK.
ضمن دليل العمل الخاص بك ، ابحث عن ملف ktools.properties ('workdir wtklib ktools.properties' أو 'workdir wtklib linux ktools.properties "كما هو الحال على جهاز بلدي). وأضف الأسطر التالية:
microedition.encoding= *encoding*
لترميز ASCII:
microedition.encoding=ISO8859_1
هذا سيؤدي المهمة (:
نصائح أخرى
أعتقد أن ذلك لأنك إما:
- باستخدام
String(byte[])
مُنشئ (يجب تجنب هذا المُنشئ عمومًا) - باستخدام
String(byte[], String)
مُنشئ بشكل غير صحيح
في كلتا الحالتين ، سوف تقوم بفك تشفير بيانات البايت إلى بيانات الأحرف باستخدام الترميز الخاطئ ، وهو ترميز حيث قيمة البايت 10010111
غير قانوني (على الأقل ، كبايت أول).
أي تحويل من byte
البيانات إلى char
ستشمل البيانات (مثل إنشاء سلسلة) تحويل البيانات من "بعض الترميز الآخر" إلى UTF-16. تحتاج إلى معرفة وتحديد ما "بعض الترميز الآخر" هو قبل إجراء هذا التحول.