MIDP problemas de versão 2.0: $ método é indefinido para $ type
Pergunta
Eu escrevi um MIDlet que faz várias coisas "avançadas":. Buscar imagens da web, redimensionando-los, salvá-los no telefone, exibindo-
Isso tudo funciona perfeitamente no emulador Nokia S60 3rd Edition FP1. Este dispositivo tem MIDP 2.0 e CLDC 1.1 suporte (também JSR75, o que eu preciso, a fim de salvar os arquivos). Ele também funciona como deveria no Nokia E71 (dispositivo físico).
Então eu tentei executar o MIDlet em vários outros emuladores. Um deles, o DefaultCldcJtwiPhone2 de Java ME SDK 3.0, também afirma MIDP 2.0 e 1.1 CLCA apoio. Ele não tem JSR75, o que explica por que "FileConnection não pode ser resolvido para um tipo".
Isto não significa, no entanto, explicar por que List.deleteAll (), String.equalsIgnoreCase (String) e alguns outros são indefinido.
Os erros reais que eu recebo:
- O método ceil (duas vezes) não está definida para o tipo da matemática
- O deleteAll método () é indefinido para o tipo List
- O método equalsIgnoreCase (String) é indefinido para o tipo String
- O método getWidth () é indefinido para o tipo visualizável
Quando eu olhar para o MIDP 2.0 (ou seja JSR118) API ( http: / /java.sun.com/javame/reference/apis/jsr118/ ), que pode ver claramente todos estes métodos de estar presente, com o "desde" tag sendo quer MIDP 2.0 ou CLCA 1.1.
Meu Pergunta ??strong>: por que não um emulador com MIDP 2.0 Suporta têm acesso a todos os métodos de MIDP 2.0? Ou, alternativamente, o que estou fazendo de errado?
Solução
Parece que você está usando métodos definidos em CLDC 1.1; o emulador que você está usando apenas deve suportar CLDC 1.0 (isso certamente explicaria a falta de equalsIgnoreCase()
e qualquer coisa que envolva double
e float
primitivas). Veja a API completa aqui . E veja aqui para uma lista de diferenças entre 1.0 e 1.1.
EDIT: Algumas maneiras de verificar a versão CLDC do seu dispositivo:
1) Verifique a propriedade do sistema microedition.configuration como descrito aqui .
System.out.println("The CLDC version is: " + System.getProperty("microedition.configuration"));
2) Verifique a existência de uma classe suportado apenas em 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");
}
Outras dicas
referências Eclipse tanto cldc_1.0.jar e cldc_1.1.jar (bem como midp_2.0.jar e midp_2.1.jar).
Para corrigi-lo: Ir para a Janela> Preferências> Java ME> Dispositivo Managment> seu dispositivo > Editar ...> Bibliotecas> cldc_1.0.jar> Remover
Mais detalhes você pode encontrar aqui: http://thompsonng.blogspot.com/2009/09/j2me-setting-eclipse-to-use-cldc-11.html
Mesmo depois de ter escolhido um dispositivo emulador que suporta CLDC-1.1, como DefaultCldcJtwiPhone2, você ainda pode configurá-lo para emular um único telefone CLDC-1.0.
Pelo menos é isso que as propriedades do projeto no Netbeans parecer.
Eu tenho o mesmo problema hoje (11/03/10) após a atualização a partir de: SDK 1.6.0_17 + eclipse ee 3.5.1 + Java_ME_platform_SDK_3.0 EA. para: SDK 1.6.0_18 + eclipse ee 3.5.2 + Java_ME_platform_SDK_3.0.
O método ceil (duas vezes) não está definida para o tipo da matemática O piso método (duas vezes) não está definida para o tipo da matemática O método abs (int) no tipo de matemática não é aplicável para os argumentos (duplo) O sqrt método (duplo) é indefinido para o tipo de matemática