Исключение мидлета J2ME: исключение IOException , считывающее недопустимый первый байт считывателя

StackOverflow https://stackoverflow.com/questions/2133091

  •  22-09-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top