J2ME Midlet Exception: IoException Reading Reader inválido Primeiro byte
Pergunta
Quando corro meu meio com o Java Wireless Toolkit, o Midlet funciona corretamente, mas quando ele tenta analisar um campo de texto, ocorre o erro seguinte;
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)
Qual é o problema?
Estou usando o JWT 2.5.2_01
Solução
Problema resolvido.
Como McDowell mencionou antes, o problema era sobre codificar configurações. A melhor maneira de superar esse problema é declarar informações de codificação do WTK.
No seu diretório de trabalho, encontre o arquivo Ktools.Properties ('Workdir wtklib ktools.properties' ou 'workdir wtklib linux ktools.properties', como está na minha máquina). E adicione as seguintes linhas:
microedition.encoding= *encoding*
Para codificação ASCII:
microedition.encoding=ISO8859_1
Isso fará o trabalho (:
Outras dicas
Eu acho que é porque você é:
- usando o
String(byte[])
construtor (esse construtor geralmente deve ser evitado) - usando o
String(byte[], String)
construtor incorretamente
Nos dois casos, você estaria decodificando dados de bytes para os dados de caracteres usando a codificação errada, uma codificação onde o valor do byte 10010111
é ilegal (pelo menos, como primeiro byte).
Qualquer conversão de byte
dados para char
dados (como a criação de uma string) envolverão a transformação de dados de "Alguma outra codificação" para UTF-16. Você precisa saber e especificar o que isso "Alguma outra codificação" é antes de realizar essa transformação.