2010-01-25 24 views
3

當我使用Java Wireless toolkit運行我的midlet時,midlet運行正常,但是當它嘗試解析文本字段時,會發生以下錯誤;J2ME Midlet異常:IOException讀取讀取器無效第一個字節

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) 

什麼問題?

我用的智威湯遜2.5.2_01

+0

你能張貼您用來讀取文本字段值的代碼? –

+0

不幸的是,我沒有代碼,只是jar文件,我正在JWT上運行jar。 一些谷歌搜索告訴我這個porblem與jvm編碼有關。檢查並更改e JVM的編碼設置? – FallenAngel

回答

3

問題解決。

正如McDowell之前提到的,問題在於編碼設置。克服這個問題的最好方法是從WTK中聲明編碼信息。

在您的工作目錄中,找到我的機器上的ktools.properties文件('workdir \ wtklib \ ktools.properties'或'workdir \ wtklib \ Linux \ ktools.properties')。並添加以下行:

microedition.encoding= *encoding* 

對於ASCII編碼:

microedition.encoding=ISO8859_1 

這將做的工作(:

2

我猜想,這是因爲你可以:使用String(byte[])構造(此構造一般應避免)

  • 使用String(byte[], String)

    • 構造函數不正確

    在這兩種情況下,您都會將字節數據解碼爲使用錯誤的編碼的字符數據g,字節值爲10010111的編碼非法(至少作爲第一個字節)。

    byte數據到char數據(如創建一個字符串的)任何轉換將涉及數據從「一些其他編碼」爲UTF-16的轉化。您需要知道並指定在執行此轉換之前「某些其他編碼」

  • +0

    我沒有代碼;但據我所知,編碼必須是ISO-8859-1。但設置顯示我的編碼是UTF-8 ...因爲我沒有機會改變文件的編碼,所以我必須更改JVM編碼(據我瞭解谷歌搜索結果)。但我不知道如何在Linux上完成此操作:S 我該如何在Linux上執行此操作? – FallenAngel

    +0

    @ mp0int - 很遺憾,因爲更改代碼或文件是正確的解決方案。除了通過操作系統,Java沒有支持設置默認編碼的機制。如果您絕望,可以嘗試在命令行上設置'file.encoding'屬性,但請注意這可能會產生意想不到的後果:http://bugs.sun.com/view_bug.do?bug_id=4163515 – McDowell

    相關問題