Исключение мидлета J2ME: исключение IOException , считывающее недопустимый первый байт считывателя
Вопрос
Когда я запускаю свой мидлет с помощью Java Wireless toolkit, мидлет работает корректно, но при попытке проанализировать текстовое поле возникает следующая ошибка;
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.Вам нужно знать и указывать, что это "какая-то другая кодировка" предшествует выполнению этого преобразования.