Domanda

Ho scritto una MIDlet che fa diverse cose "avanzate":. Immagini fetching dal web, ridimensionarle, salvandoli sul telefono cellulare, la loro visualizzazione

Il tutto funziona perfettamente nell'emulatore Nokia S60 3rd Edition FP1. Questo dispositivo è dotato di MIDP 2.0 e CLDC 1.1 sostegno (anche JSR75, che ho bisogno, al fine di salvare i file). Funziona anche come dovrebbe sul Nokia E71 (dispositivo fisico).

Allora ho provato a correre il MIDlet su diversi altri emulatori. Uno di loro, il DefaultCldcJtwiPhone2 dal Java ME SDK 3.0, sostiene anche MIDP 2.0 e CLDC 1.1. Non ha JSR75, il che spiega perché "FileConnection non può essere risolto a un tipo".

Ciò, tuttavia, non spiega perché List.deleteAll (), String.equalsIgnoreCase (String) e pochi altri sono indefiniti.

Gli errori reali che ottengo:

  • Il metodo ceil (doppia) è definito per il tipo Math
  • Il metodo CancTutti () non è definito per la Lista tipo
  • Il metodo equalsIgnoreCase (stringa) è definito per il tipo String
  • Il metodo getWidth () è definito per il tipo Displayable

Quando guardo il 2.0 (cioè JSR118) API MIDP ( http: / /java.sun.com/javame/reference/apis/jsr118/ ), posso vedere chiaramente tutti questi metodi essere presente, con il "dato" tag essere o MIDP 2.0 o CLDC 1.1.

Il mio questione : perché non un emulatore con supporto MIDP 2.0 avere accesso a tutti i metodi di MIDP 2.0? Oppure, in alternativa, quello che sto facendo di sbagliato?

È stato utile?

Soluzione

Sembra che si sta utilizzando i metodi definiti in CLDC 1.1; l'emulatore si utilizza deve solo supportare CLDC 1.0 (questo sarebbe certamente spiegare la mancanza di equalsIgnoreCase() e tutto ciò che coinvolge double e float primitive). Vedere la piena API qui . E vedere qui per un elenco di differenze tra 1,0 e 1.1.

EDIT: Alcuni modi per controllare la versione del dispositivo CLDC:

1) Controllare la proprietà di sistema microedition.configuration come descritto qui .

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

2) Verificare l'esistenza di una classe supportato solamente in 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");
}

Altri suggerimenti

riferimenti Eclipse sia cldc_1.0.jar e cldc_1.1.jar (così come midp_2.0.jar e midp_2.1.jar).

Per risolvere il problema: Andare in Finestra> Preferenze> Java ME> Managment Dispositivo> il tuo dispositivo > Modifica ...> Biblioteche> cldc_1.0.jar> Rimuovi

Maggiori dettagli si possono trovare qui: http://thompsonng.blogspot.com/2009/09/j2me-setting-eclipse-to-use-cldc-11.html

Anche dopo aver scelto un dispositivo emulatore che supporta CLDC-1.1, come DefaultCldcJtwiPhone2, è ancora possibile configurarlo per emulare un CLDC-1.0 unico telefono.

Almeno questo è quello che le proprietà del progetto su Netbeans assomigliano.

Ho avuto lo stesso problema di oggi (11/03/10) dopo l'aggiornamento da:  SDK 1.6.0_17 + eclissi ee 3.5.1 + Java_ME_platform_SDK_3.0 EA.  per:  SDK 1.6.0_18 + eclissi ee 3.5.2 + Java_ME_platform_SDK_3.0.

Il metodo ceil (doppia) è definito per il tipo Math Il pavimento metodo (doppia) è definito per il tipo Math Il metodo abs (int) nel tipo Math non è applicabile per gli argomenti (doppio) Il metodo sqrt (doppia) è definito per il tipo Math

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top