2010-03-10 22 views
4

J'ai écrit un MIDlet qui fait plusieurs choses "avancées": récupérer des images sur le web, les redimensionner, les enregistrer sur le téléphone, les afficher.

Tout cela fonctionne parfaitement dans l'émulateur Nokia S60 3rd Edition FP1. Cet appareil a le support MIDP 2.0 et CLDC 1.1 (également JSR75, dont j'ai besoin pour enregistrer des fichiers). Il fonctionne également comme il se doit sur le Nokia E71 (périphérique physique). J'ai ensuite essayé d'exécuter le MIDlet sur plusieurs autres émulateurs. L'un d'eux, le DefaultCldcJtwiPhone2 du Java ME SDK 3.0, revendique également la prise en charge de MIDP 2.0 et CLDC 1.1. Il n'a pas JSR75, ce qui explique pourquoi "FileConnection ne peut pas être résolu en un type".

Cela n'explique cependant pas pourquoi List.deleteAll(), String.equalsIgnoreCase (String) et quelques autres ne sont pas définis.

Les erreurs réelles que je reçois:

  • La méthode Ceil (double) est définie pour le type Math
  • La méthode deleteAll() est définie pour le type Liste
  • La méthode equalsIgnoreCase (string) est définie pour le type string
  • la méthode getWidth() est définie pour le type affichable

Quand je regarde le MIDP 2.0 (c.-à-d. JSR118) API (http://java.sun.com/javame/reference/apis/jsr118/), je peux clairement voir toutes ces méthodes étant présentes, avec la balise "depuis" étant soit MIDP 2.0 ou CLDC 1.1.

Ma question: pourquoi un émulateur avec prise en charge MIDP 2.0 n'a-t-il pas accès à toutes les méthodes MIDP 2.0? Ou bien, qu'est-ce que je fais de mal?

+0

Utilisez-vous un IDE ou simplement le Java ME SDK? –

+0

J'utilise Eclipse. Voir mon commentaire sur votre réponse. – benvd

+0

J'ai "résolu" le problème. Ainsi, lorsque j'ai changé le périphérique cible dans le descripteur d'application (fichier de configuration, peut être spécifique à l'environnement Eclipse J2ME), un émulateur CLDC 1.1 n'est pas reconnu comme tel. Il s'avère que cela fonctionne correctement lorsque je crée une nouvelle configuration de débogage (ou d'exécution), où je peux définir l'émulateur à celui que je veux ... – benvd

Répondre

1

On dirait que vous utilisez les méthodes définies dans CLDC 1.1; l'émulateur que vous utilisez doit uniquement supporter CLDC 1.0 (ceci expliquerait certainement l'absence de equalsIgnoreCase() et tout ce qui concerne les primitives double et float). Voir l'API complète here. Et voyez here pour une liste de différences entre 1.0 et 1.1.

EDIT: Voici quelques façons de vérifier la version CLDC de votre appareil:

1) Vérifiez la propriété du système microedition.configuration comme décrit here.

System.out.println("The CLDC version is: " + System.getProperty("microedition.configuration")); 

2) Vérifier l'existence d'une classe prise en charge uniquement dans 1.1.

try { 
    Class.forName("java.lang.ref.WeakReference"); 
    System.out.println("It's CLDC 1.1"); 
} catch (ClassNotFoundException e) { 
    System.out.println("It's CLDC 1.0"); 
} 
+0

Oui, ces méthodes font en effet partie du CLDC 1.1, je suis conscient des différences. J'ai mentionné que les émulateurs que je suis en train de tester supportent CLDC 1.1, donc je ne devrais pas avoir ces problèmes. À moins que les émulateurs ne supportent vraiment que CLDC 1.0 ...? – benvd

+0

Je pense que votre emu dit des mensonges! Réponse éditée pour inclure certaines façons de dire à coup sûr. – funkybro

+0

J'ai fait un nouveau projet et ajouté la ligne System.getProperty, mais il a imprimé "La version CLDC est: CLDC-1.1". Essayer de construire mon vrai projet avec exactement le même émulateur soulève toujours les mêmes erreurs. – benvd

0

Même après avoir choisi un dispositif émulateur qui prend en charge CLDC-1.1, comme DefaultCldcJtwiPhone2, vous pouvez toujours le configurer pour émuler un seul téléphone CLDC-1.0.

Au moins, c'est ce à quoi ressemblent les propriétés du projet sur Netbeans.

+0

J'utilise Eclipse, mais la configuration de mon projet est définie sur CLDC 1.1 et les propriétés du périphérique indiquent également CLDC 1.1. – benvd

0

J'ai eu le même problème aujourd'hui (11/03/10) après la mise à jour de: SDK 1.6.0_17 + eclipse ee 3.5.1 + Java_ME_platform_SDK_3.0 EA. à: SDK 1.6.0_18 + eclipse ee 3.5.2 + Java_ME_platform_SDK_3.0.

La méthode ceil (double) est définie pour le type Math L'étage de procédé (double) est définie pour le type Math La abs méthode (int) dans le type Math est pas applicable pour les arguments (double) La méthode sqrt (double) n'est pas définie pour le type Math

1

Eclipse référence à la fois cldc_1.0.jar et cldc_1.1.jar (ainsi que midp_2.0.jar et midp_2.1.jar).

Pour résoudre ce problème: Aller à la fenêtre> Préférences> Java ME> Périphérique Managment>votre périphérique> Modifier ...> Bibliothèques> cldc_1.0.jar> Retirer

Plus de détails vous pouvez trouver ici: http://thompsonng.blogspot.com/2009/09/j2me-setting-eclipse-to-use-cldc-11.html