J2ME Midlet异常:IOException读取读取器无效的第一个字节

时间:2010-01-25 14:57:28

标签: java java-me midlet midp

当我使用Java Wireless工具包运行我的midlet时,midlet正确运行,但是当它尝试解析文本字段时,会发生以下错误;

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

2 个答案:

答案 0 :(得分:3)

解决了问题。

正如McDowell之前提到的,问题在于编码设置。解决此问题的最佳方法是从WTK声明编码信息。

在您的工作目录中,找到ktools.properties文件('workdir \ wtklib \ ktools.properties'或'workdir \ wtklib \ Linux \ ktools.properties',就像在我的机器上一样)。并添加以下行:

microedition.encoding= *encoding*

对于ASCII编码:

microedition.encoding=ISO8859_1

那将完成这项工作(:

答案 1 :(得分:2)

我猜这是因为你要么:

  • 使用String(byte[])构造函数(通常应避免使用此构造函数)
  • 错误地使用String(byte[], String)构造函数

在这两种情况下,您都会使用错误的编码将字节数据解码为字符数据,这是一种编码,其中字节值10010111是非法的(至少作为第一个字节)。

byte数据到char数据的任何转换(例如创建字符串)都将涉及将数据从“其他一些编码”转换为UTF- 16。您需要知道并指定执行此转换之前“其他编码”的内容。