2010-01-25 21 views
3

Lorsque j'exécute mon midlet avec Java Wireless Toolkit, midlet s'exécute correctement, mais lorsqu'il essaie d'analyser un champ de texte, une erreur de suivi se produit;J2ME Midlet exception: lecteur de lecture IOException premier octet invalide

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) 

Quel est le problème?

J'utilise JWT 2.5.2_01

+0

Pourriez-vous poster le code que vous utilisez pour lire la valeur du champ de texte? –

+0

Malheureusement, je n'ai pas le code, mais juste le fichier jar.Je suis en cours d'exécution jar sur JWT Certains googling me montrent ce porblem était lié à l'encodage jvm. vérifier et changer e Paramètres de codage de la machine virtuelle Java? – FallenAngel

Répondre

3

Problème résolu.

Comme McDowell mentionné précédemment, le problème était sur les paramètres de codage. La meilleure façon de surmonter ce problème est de déclarer les informations d'encodage de WTK.

Dans votre répertoire de travail, recherchez le fichier ktools.properties ('workdir \ wtklib \ ktools.properties' ou 'workdir \ wtklib \ Linux \ ktools.properties' tel qu'il se trouve sur ma machine). Et ajoutez les lignes suivantes:

microedition.encoding= *encoding* 

Pour le codage ASCII:

microedition.encoding=ISO8859_1 

qui fera le travail (:

2

Je suppose que c'est parce que vous êtes soit:

  • utilisant le constructeur String(byte[]) (ce constructeur doit généralement être évité)
  • utilisant le String(byte[], String) constructeur incorrectement

Dans les deux cas, vous décoder des données d'octet à des données de caractères en utilisant le mauvais codage g, un codage où la valeur de l'octet 10010111 est illégale (au moins, en tant que premier octet).

Toute conversion de données à bytechar données (telles que la création d'une chaîne) impliquera la transformation des données de « un autre encodage » UTF-16. Vous devez connaître et spécifier ce que "un autre codage" est avant d'effectuer cette transformation.

+0

Je n'ai pas le code; mais pour autant que je sache, l'encodage doit être ISO-8859-1. Mais les paramètres montrent que mon encodage est UTF-8 ... Comme je n'ai pas la chance de changer l'encodage des fichiers, je dois changer l'encodage JVM (pour autant que je comprenne des résultats de recherche google). Mais je ne sais pas comment faire cela sur Linux: S Comment puis-je faire cela sur Linux? – FallenAngel

+0

@ mp0int - C'est dommage, car la modification du code ou du fichier est la bonne solution. Java ne dispose pas d'un mécanisme pris en charge pour définir l'encodage par défaut, sauf via le système d'exploitation. Si vous êtes désespéré, vous pouvez essayer de définir la propriété 'file.encoding' sur la ligne de commande, mais sachez que cela peut avoir des conséquences inattendues: http://bugs.sun.com/view_bug.do?bug_id=4163515 – McDowell