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

Когда я запускаю свой мидлет с помощью набора инструментов Java Wireless, мидлет работает правильно, но когда он пытается проанализировать текстовое поле, возникает следующая ошибка;

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.


person FallenAngel    schedule 25.01.2010    source источник
comment
Не могли бы вы опубликовать код, который вы используете для чтения значения из текстового поля? Это, вероятно, будет более полезным, чем трассировка стека.   -  person James Goodwin    schedule 25.01.2010
comment
К сожалению, у меня нет кода, а только файл jar. Я запускаю банку на JWT. Некоторые гуглы показывают мне, что эта проблема связана с кодировкой jvm. Как я могу проверить и изменить настройки кодирования JVM?   -  person FallenAngel    schedule 25.01.2010


Ответы (2)


Задача решена.

Как упоминал ранее Макдауэлл, проблема заключалась в настройках кодирования. Лучший способ решить эту проблему - объявить информацию о кодировке из WTK.

В рабочем каталоге найдите файл ktools.properties («workdir\wtklib\ktools.properties» или «workdir\wtklib\Linux\ktools.properties», как на моей машине). И добавьте следующие строки:

microedition.encoding= *encoding*

Для кодировки ASCII:

microedition.encoding=ISO8859_1

Это сделает работу (:

person FallenAngel    schedule 26.01.2010

Я предполагаю, что это потому, что вы либо:

  • используя конструктор String(byte[]) (этот конструктор обычно следует избегать)
  • неправильное использование конструктора String(byte[], String)

В обоих случаях вы будете декодировать байтовые данные в символьные данные, используя неправильную кодировку, кодировку, в которой значение байта 10010111 является недопустимым (по крайней мере, в качестве первого байта).

Любое преобразование данных byte в данные char (например, создание строки) будет включать преобразование данных из "другой кодировки" в UTF-16. Вам нужно знать и указать, что это за "другая кодировка", прежде чем выполнять это преобразование.

person McDowell    schedule 25.01.2010
comment
у меня нет кода; но насколько я знаю, кодировка должна быть ISO-8859-1. Но настройки показывают, что моя кодировка - UTF-8... Поскольку у меня нет возможности изменить кодировку файлов, я должен изменить кодировку JVM (насколько я понимаю из результатов поиска Google). Но я не знаю, как это сделать в Linux :S Как я могу сделать это в Linux? - person FallenAngel; 25.01.2010
comment
@ mp0int - Жаль, потому что изменение кода или файла - правильное решение. Java не имеет поддерживаемого механизма для установки кодировки по умолчанию, кроме как через операционную систему. Если вы в отчаянии, вы можете попробовать установить свойство file.encoding в командной строке, но имейте в виду, что это может иметь непредвиденные последствия: bugs.sun.com/view_bug.do?bug_id=4163515 - person McDowell; 25.01.2010