SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
J2ME
Versão 1.0.0
Sumário
I Sobre essa Apostila 3
II Informações Básicas 5
III GNU Free Documentation License 10
IV J2ME 19
1 O que é J2ME ? 20
2 Plano de ensino 21
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Introdução 24
3.1 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Breve História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Fazendo o Primeiro Programa 29
4.1 MIDlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Iniciando no NetBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.5 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5 Interfaces 38
5.1 Interface de Alto-Nível . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.1 TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.2 List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.1.3 Alert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.1.4 Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2 Interface de Baixo-Nível . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2
Parte I
Sobre essa Apostila
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.
Autores
A autoria deste é de responsabilidade de Rafael Mendes Marques de Brito (rafael@cdtc.org.br)
.
O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que
vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e
utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades
no país.
Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível;
• Os 10 mandamentos do aluno de Educação a Distância;
• Como participar dos foruns e da wikipédia;
• Primeiros passos.
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância;
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas;
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores;
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais;
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real;
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas;
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet;
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
9
Parte III
GNU Free Documentation License
10
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)
Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-
leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição
de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,
nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.
This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.
Licença de Documentação Livre GNU Versão 1.1, Março de 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas
não é permitido alterá-lo.
INTRODUÇÃO
O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no
sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,
com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.
Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do
documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.
Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a
manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente
do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.
APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um
11
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
licenciado e é referida como "você".
Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento
ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.
Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).
Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.
As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.
Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.
Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".
Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.
A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,
mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
FAZENDO CÓPIAS EXATAS
Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.
Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.
Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.
FAZENDO CÓPIAS EM QUANTIDADE
Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara
e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e
Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.
Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.
Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, à qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.
É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:
A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;
B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);
C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;
D. Preservar todas as notas de copyright do Documento;
E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;
F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;
G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;
H. Incluir uma cópia inalterada desta Licença;
I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;
J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;
K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;
L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em
seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;
M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;
N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.
Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.
Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.
Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente
, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos
de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de
Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.
Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por
você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.
O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.
COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.
O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.
Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-
sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.
Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.
AGREGAÇÃO COM TRABALHOS INDEPENDENTES
Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.
Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa
do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.
Senão eles precisarão aparecer nas capas de todo o agregado.
TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.
TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA
A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.
A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar
que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.
ADENDO: Como usar esta Licença para seus documentos
Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:
Copyright (c) ANO SEU NOME.
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".
Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.
Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,
17
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
tal como a GNU General Public License, para permitir o seu uso em software livre.
18
Parte IV
J2ME
19
Capítulo 1
O que é J2ME ?
J2ME é uma tecnologia Java voltada para desenvolvimento em microdispositivos. No curso de
J2ME você aprenderá conceitos básicos sobre essa tecnologia, fará alguns programas-exemplos
e terá uma visão geral de desenvolvimento para celulares (não incluindo a parte de jogos e
conectividade).
20
Capítulo 2
Plano de ensino
2.1 Objetivo
Capacitar o usuário para a familiarização com a tecnologia J2ME.
2.2 Público Alvo
Programadores em Java que queiram aprender sobre a tecnologia J2ME.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, funcionários de empresas públicas e ter conheci-
mentos básicos para operar um computador. Também é necessário que usuário tenha conheci-
mentos básicos em Java.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é composto
por um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser
executadas de acordo com as instruções fornecidas. O material didático está disponível on-line
de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do Audacity é a
1.2.3, caso possua outra versão instalada, podem ocorrer poucas diferenças.
Todo o material está no formato de lições e estará disponível ao longo do curso. As lições
poderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien-
tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades
advindas do "desconhecimento"sobre o mesmo.
Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado
anteriormente que também conterá perguntas sobre os textos indicados. Utilize o material de
cada semana e os exemplos disponibilizados para se preparar para prova.
Os instrutores estarão à sua disposição ao longo de todo curso. Qualquer dúvida deve ser
disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e
esclarecimentos.
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
• Instalação;
• Introdução e Arquitetura do J2ME;
• MIDP;
• Fazendo o Primeiro Programa;
• Threads;
• Eventos;
• Interface de Alto Nível;
• Interface de Baixo Nível.
As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces-
sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada
a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão considera-
das para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante
a avaliação final.
2.7 Programa
O curso de J2ME oferecerá o seguinte conteúdo:
• Introdução e Instalação;
• Alguns programas exemplos.
2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;
• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.
Instrumentos de avaliação:
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Participação ativa nas atividades programadas.
• Avaliação ao final do curso.
• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliações
2.9 Bibliografia
• Site official: http://developers.sun.com/mobility/
23
Capítulo 3
Introdução
3.1 Instalação
Temos à nossa disposição uma variedade de métodos de instalação do Java, podendo variar
dependendo da distribuição GNU/Linux utilizada.
É importante notar que diferentes métodos de instalação poderão prover versões diferentes
do software. Neste curso, por exemplo, utilizaremos a versão 1.6.0.
Para facilitar um pouco no início da programação J2ME usaremos uma IDE, o NetBeans. Vale
ressaltar que o uso de alguma IDE em específico ou até o não uso de uma, fica a critério do
próprio aluno. Porém, recomenda-se que o aluno siga a nossa orientação.
Podemos diferenciar os métodos de instalação basicamente entre aqueles que utilizam pa-
cotes pré-compilados da própria distribuição ou aqueles que utilizam um binário genérico para
Linux, provido pela própria Sun Microsystems.
Para se programar em J2ME, precisa-se de três requisitos básicos:
• JDK (Java Development Kit);
• WTK (Wireless Toolkit) > especificamente para J2ME;
• Alguma IDE > isso fica a critério do programador.
No nosso curso faremos apenas o download e instalação do:
• NetBeans + JDK ( IDE integrada com o JDK);
• NetBeans Mobility Pack (anexo para programação para móveis no NetBeans, incluindo o
WTK).
Instalação através de pacote binário para ambientes Linux
O primeiro método que iremos abordar quanto à instalação do Java será o da instalação do
pacote binário provido pela Sun. Para atingir sucesso por esse método de instalação devemos
saber como obter esse pacote e instalá-lo, além de adicionar entradas apropriadas nos arquivos
de configuração do sistema.
O pacote binário do NetBeans+JDK pode ser obtido a partir do site da Sun, neste link. Esta
versão é o Netbeans 5.5.1 com o JDK 6. Deve-se então marcar a caixa "Accept"e clicar no
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
segundo link (se for realmente para Linux) para download do arquivo. Só para conferir, o nome
do arquivo deve ser "jdk-6u1-nb-5_5_1-linux-ml.bin"
Pronto, agora o pacote está sendo baixado. Após obtido o pacote você deverá executá-lo.
Mas antes, certifique-se de que você esteja logado no sistema como Superusuario(root). Para
tal, deve-se digitar o comando em um terminal:
$ su
Caso ele não esteja executável, pode ser necessário dar permissões de execução ao arquivo
utilizando o comando dentro do diretório onde ele estiver:
# chmod +x jdk-6u1-nb-5_5_1-linux-ml.bin
Feito isso, execute o arquivo com o comando:
# ./jdk-6u1-nb-5_5_1-linux-ml.bin
Se tudo for seguido como recomendado, o NetBeans e o JDK deverão ser instalados automa-
ticamente dentro do diretório opt , assim como mostra a figura:
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Pronto, instalamos já a IDE NetBeans junto com o JDK. Agora precisaremos instalar o Mobility
Pack do NetBeans, fazendo o download dele neste link. O arquivo se chama "netbeans_mobility-
5_5_1-linux.bin". Pronto, agora basta fazer o mesmo procedimento que foi feito na instalação do
NetBeans; Dar permissão ao arquivo e executá-lo. Automaticamente será encontrado o diretório
onde foi instalado o JDK, basta apenas verificar.
Bem efetuadas as instalações, já temos o ambiente pronto para desenvolver em J2ME.
3.2 Breve História
Em 1991, engenheiros da Sun Microsystems tiveram a idéia de criar uma linguagem que pu-
desse ser uma tecnologia inovadora e ímpar naquele momento. Eles acreditavam que o futuro es-
tava na convergência entre computadores e eletrodomésticos. Então, baseando-se nessa crença
foi criado o Oak (carvalho em inglês), linguagem altamente portável e voltada para sistemas de
baixa complexidade.
No entanto, o ideal pareceu estar muito distante da sua real aplicabilidade e, por isso, o Oak
encontrou sérias dificuldades mercadológicas, impedindo o "sonho"da Sun Microsystems de se
concretizar. Perseverante, a Sun prosseguiu com o projeto voltando-se para uma nova tendência,
um nicho de mercado emergente e até então desconhecido, a Internet. A partir dai juntamente
com o "boom"desse novo meio de comunicação é que os engenheiros da Sun encontraram o
caminho certo para desenvolvimento e utilização do Oak. Mas, por problemas de direitos auto-
rais o Oak passa a ser chamado de Java e, em 1995, o sonho da Sun se realiza. É lançada
oficialmente a linguagem Java, feita inicialmente para se disseminar pela Internet, por meios de
programas (applets) que se executavam dentro dos browsers.
Em 1999, a Sun Microsystems lança o JME ( Java Mobility Edition), retomando um pouco da
idéia original do Oak de se programar para dispositivos móveis e softwares embarcados. Desde
o seu lançamento, centenas de corporações na área de dispositivos móveis aderiram a essa
tecnologia. Mais tarde, ela ganha a versão 2.0, o que a levou a ser conhecida como ’J2ME’[1].
[1] Esse termo já está caindo em desuso hoje em dia, possibilitando que também use-
mos o termo 'JME'. Neste curso iremos usar o ainda mais comum 'J2ME'.
3.3 Introdução
Plataformas de Desenvolvimento para Dispositivos Móveis:
-Windows Mobile > SO(SistemaOperacional) para dispositivos móveis da Microsoft;
-SymbianOS > SO otimizado para terminais móveis;
-Brew > Voltado para o desenvolvimento de aplicativos apenas para celulares CDMA;
-ExEn > Voltado para o desenvolvimento de jogos, visando principalmente o mercado euro-
peu;
-Mophun > Outra linguagem voltada para o desenvolvimento de jogos para celulares;
-J2ME > Voltado para odesenvolvimento de aplicativos para dispositivos móveis.
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Nesse curso abordaremos a Plataforma J2ME.
O Java 2 Micro Edition é usado para dispositivos muito limitados. Ou seja, pouca capaci-
dade de processamento, pequena fonte de energia e pouca memória, problemas que hoje em
dia estão sendo contornados pelo uso de memórias externas. Essa plataforma foi feita para se
conseguir rodar aplicações assim como acontece na J2SE, só que em micro dispositivos. Alguns
até consideram que a J2ME é nada mais do que um compacto da J2SE, o que não deixa de ser
verdade até certo ponto.
Para construção do J2ME foi preciso fazer uma grande modificação na JSE, consistindo basi-
camente de remoções de certas propriedades e adaptação de outras. Tudo isso com o propósito
de melhor se adequar à arquitetura dos micro dispositivos. A JVM (Java Virtual Machine), por
exemplo, foi adaptada para se criar a JKVM (Java Kilo Virtual Machine), sendo a primeira na
ordem de megas e a segunda na ordem de kilos, justamente por causa da memória reduzida.
3.4 Arquitetura
Configurações (CDC/CLDC)
J2ME oferece duas "configurações": a CDC (Connect Device Configuration) e a CLDC (Con-
nect Limited Device Configuration), que se caracterizam de acordo com o tipo de dispositivo.
Connect Device Configuration - CDC:
Para dispositivos maiores em termos de memória, processamento e energia, geralmente li-
gados por fios. Exemplos: Televisores interativos, set-top box (para tvs digitais), sistemas de
navegação de carro...
Connect Limited Device Configuration - CLDC:
A tecnologia CLDC é um subconjunto do CDC. Foi feito para dispositivos mais limitados, com
grande ou total portabilidade. Nosso foco se encontrará aqui, visto que é aqui que se enquadram
certos dispositivos tão corriqueiros em nosso dia-a-dia. Exemplos: celulares com tecnologia
JAVA, smartphones, pagers, PDAs.
Perfis
Os perfis nos fornecem um conjunto de APIs combinadas para formar um ambiente especí-
fico. Junto com as configurações proverão acesso a propriedades específicas dos dispositivos.
Abaixo, serão citados alguns perfis.
Mobile Information Device Profile(MIDP) » Perfil de máximo nível na configuração CLDC,
feito para celulares e PDAs.
Foundation Profile(FP) » É o perfil de nível mais baixo dentre os outros perfis de CDC.
Personal Profile(PP) » Perfil CDC para suportes à applets e interface gráfica AWT.
Personal Basis Profile(PBP) »Divisão do PP que suporta um nível básico de interface gráfica.
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Neste curso abordaremos o MIDP, que se divide em sua antiga versão MIDP1.0 e a sua mais
nova MIDP2.0.
28
Capítulo 4
Fazendo o Primeiro Programa
Falaremos agora um pouco mais do perfil MIDP. Ele é um ambiente de desenvolvimento para
MIDs e oferece muita eficiência e liberdade. Algumas características:
• 128kB de memória não-volátil para JAVA;
• 32KB de memória volátil para tempo de execução;
• 8KB de memória não-volátil de para armazenamento de dados;
• uma tela com o mínimo de 96x54 pixels;
• Capacidade de entrada de dados: teclado, tela touch-screen, etc.
MIDP 1.0 E MIDP 2.0:
O perfil MIDP 2.0 é uma versão mais nova do perfil MIDP. Ele apresenta funcionalidades que o
MIDP 1.0 não apresenta. As funcionalidades originadas na versão 2.0 mais marcantes são clas-
ses próprias para jogo (GameAPI), comunicação de dados por https (mais segura), manipulação
de sons(MediaAPI) e segurança no geral. Com a versão 1.0 não se pode fazer coisas como:
• Pontos Flutuantes: double e float;
• Apesar de existiroGarbage Collector, não se pode utilizar o método automático;
• MultiThreading não possui os métodos pause(), resume(), stop() e interrupt();
• Uso de métodos nativos;
• Em java.lang.Object não se tem o método finallize();
Entre outros.
4.1 MIDlets
MIDlets são aplicativos J2ME desenvolvidos dentro do perfil MIDP. Tem como principal carac-
terística a portabilidade, pode-se rodar em qualquer ambiente desde que esse tenha suporte à
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
J2ME-MIDP.
Ciclo de vida do MIDlet
Os MIDlets possuem um ciclo de vida. Um MIDLet pode estar em 3 estados: ativado, pausado
e terminado (ou destruído).
• public void startApp(): é o método que será chamado no início de execução do aplica-
tivo. Ele será chamado logo depois do construtor da classe. Geralmente aqui é definido o
componente que será mostrado na tela.
• public void pauseApp(): é o método que será chamado quando houver uma interrupção
na execução do aplicativo por parte do sistema operacional do aparelho, por exemplo, o
recebimento de uma ligação, mensagem de bateria fraca, etc. Aqui deve-se criar um meio
de congelar(pause) a aplicação para que ela possa ser recuperada corretamente depois da
interrupção.
• public void destroyApp(boolean b): é o método chamado quando o aplicativo é fechado.
Aqui pode-se colocar códigos para persistir alguma informação que você queira recuperar
nas próximas vezes que abrir o aplicativo.
É importante lembrar que esses três métodos devem estar presentes em qualquer classe que
herde de MIDlet. Porém, não precisam conter código dentro deles, a não ser o startApp, que é
onde chamamos um componente Displayable para a tela.
4.2 Iniciando no NetBeans
Iremos nesta lição, programar, compilar e rodar o nosso primeiro MIDlet. Antes, iremos ver
algumas coisas básicas do NetBeans como: criar, compilar e rodar um programa.
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
O primeiro passo é criar um novo projeto. Acompanhe a figura a seguir:
Selecione "Mobile Application"dentro da categoria "Mobile"e clique em "Próximo".
Agora, escolha o nome do projeto. No exemplo foi usado "Primeiro Programa". Desmarque a
caixa "Create Hello MIDlet", assim como a figura mostra:
Clique em "Finalizar".
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Pronto, nosso projeto está criado. O segundo passo é criar um novo arquivo. Acompanhe a
figura abaixo:
Selecione "MIDlet"dentro da categoria "MIDP". Clique em "próximo".
Pronto! Já temos um projeto criado e um arquivo. Agora é só começar nosso programa.
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.3 Hello World
Faremos um midlet simples, o clássico "HelloWorld". É bom se iniciar com o HelloWorld
para mostrar que J2ME não tem nenhum mistério. Bem, primeiramente vamos ver o código, as
explicações virão comentadas. Examinem e façam o programinha abaixo.
import javax . microedition . midlet . * ; / / importando a b i b l i o t e c a midlet e l c d u i
import javax . microedition . l c d u i . * ;
5 / / aqui a classe concreta HelloWorld estende à classe abstrata MIDlet
public class HelloWorld extends MIDlet {
/ / criando um objeto da classe Display , ele representará a t e l a do c e l u l a r
private Display display ;
/ / criando o StringItem que vai receber a nossa s t r i n g
10 private StringItem h e l l o s t r i n g ;
/ / criando um Form
private Form f o r m u l a r i o P r i n c i p a l ;
public HelloWorld ( ) / / metodo construtor
15 {
display=Display . getDisplay ( this ) ; / / associa o objeto display à t e l a do
c e l u l a r
f o r m u l a r i o P r i n c i p a l = new Form( "Helo" ) ; / / adiciona um t í t u l o ao nosso
form
/ / passamos a s t r i n g para o objeto h e l l o s t r i n g . O primeiro parâmetro é
o t í t u l o que o h e l l o s t r i n g terá
h e l l o s t r i n g = new StringItem ( "" ,"Hello World!" ) ;
20 / / faz−se um append do h e l l o s t r i n g com f o r m u l a r i o P r i n c i p a l
f o r m u l a r i o P r i n c i p a l . append ( h e l l o s t r i n g ) ; / / assim o StringItem f i c a r á "
colado " no form .
}
/ *
25 * abaixo temos as 3 classes que todo MIDlet deve t e r
* /
public void startApp ( ) {
display . setCurrent ( f o r m u l a r i o P r i n c i p a l ) ; / / carrega o f o r m u l a r i o P r i n c i p a l
}
30
public void pauseApp ( ) {
}
public void destroyApp ( boolean unconditional ) {
35 }
}
/ / fim MIDlet −−−−−−−−−−−−−−−−
Observem que os métodos startApp ,pauseApp e destroyApp sempre devem constar nos MIDlets, mesmo
que o pauseApp e o destroyApp estejam sem conteúdo.
Pronto, aí está o Hello World, agora compilem.
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Agora basta compilar e rodar, assim como mostra a figura:
Nosso programa então abrirá no emulador do WTK (Wireless Toolkit) e deverá ser mostrado
como na figura:
O emulador mostrado na figura faz parte de outra versão do WTK. A diferença é apenas no layout.
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.4 Threads
Veremos agora um RESUMO de threads, para que possamos usar no restante do curso.
Em Java, pode-se lançar múltiplas atividades dentro de um único processo. A isso chamamos
Threads ou MultiThreading. Um programa em execução é dito como um processo. Um processo
em adamento aloca diversos recursos como memória, uso do processador e outros, sendo que
o sistema operacional é o responsável por esse controle. Já quem controla as várias threads
dentro do programa é próprio interpretador Java. Por isso o uso de threads proporciona um maior
desempenho em ambientes mulltiprocessados, simplifica a modelagem de algumas aplicações e
tem um custo menor de gerenciamento em relação aos processos.
Há duas maneiras de se implementar threads em Java, usando-se herança da classe Thread
ou implementando uma interface da classe Runnable.
Criando Threads
Uma thread têm os seguintes estados:
• Criada: instância de Thread criada, mas segmento não iniciado;
• Executável: método start() chamado; está esperando instrução para ser executado;
• Suspensa (espera/bloqueio): ativo, mas não está barrado para execução. Pode tornar a ser
executável. Espera por recurso ( I/O) ou causada pelo código;
• Em Execução: thread sendo executada;
• Inativa: quando o método run() é concluído.
Principais Métodos:
• run() - Executa as atividades da thread. Se este método finaliza, a thread também o faz;
• start() - Determina a execução da thread. Chama o método run() antes de finalizar;
• sleep(int x) - Coloca a thread para dormir por x milisegundos;
• join() - Espera o término da thread para qual foi mandada a mensagem para poder ser
liberada;
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• yeld()- cede a vez para outro segmento;
• interrupt() - Interrompe a execução da thread e cede a vez para outro segmento;
• interrupted() - Testa se a thread está ou não está interrompida.
Prioridades de Threads
Em Java, a prioridade é determinada como um valor inteiro de 1 à 10. A prioridade 10 é a
maior, a 1 é a menor e a 5 é a prioridade padrão. A thread herda a prioridade da thread que
acriou. Métodos:
void setPriority(int prioridade);
int getPriority();
4.5 Eventos
Nos dispositivos J2ME a tela é muito pequena e fica ruim usar muitos "botões"na tela para
serem "clicados", assim como em J2SE. Uma alternativa é a entrada pelos botões do próprio
teclado (ao invés dos botões das telas). A maioria dos aparelhos possuem 2 botões principais
(chamados de SoftKeys) : um na direita e outro na esquerda (definidos como reject e accept,
previous e foward, respectivamente). Porém, não quer dizer que podemos usar só estes 2 botões.
São os commands que fazem a interação entre o usuário e a aplicação. Os commands podem
usar tanto as softkeys, quanto as outras teclas, ítens de menus e etc.
Alguns tipos de Command: -back, exit, stop, cancel, screen, ok, help, item
Primeiro de tudo, para se usar os commands, devemos fazer com que a classe do MIDlet
implemente a classe CommanListener.
Ex:
public HelloWorld extends MIDlet implements CommandListener{
...
}
Assim como foi usado o "append"no programa passado, usaremos o "addCommand"para
adicionar os comandos desejados. Displayable.setCommandListener() é o método que relaciona
qual classe irá fazer o uso dos eventos do teclado. CommandListener é a interface entre o teclado
e as classes que o chamam. O método commandAction() é acionado quando um evento ocorre,
identificando o evento e fazendo a sua ação associada. Sua forma é:
commandAction(Command c, Displayable d)
{
//eventos
}
Usando como parâmetros o comando recebido e o Displayable atual.
Dentro do commandAction incluiremos alguns eventos, com suas respectivas ações relaci-
onadas. A implementação é simples e intuitiva, feita com um simples if (c == this.comando).
Veremos:
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
public void commandAction(Command c, Displayable d) {
if (c == this.comando1) {
//acao1
}
if (c == this.comando2 ) {
//acao2
}
//podemos adicionar aqui mais eventos...
//veja 2 exemplos implementados
if (c == this.sair) { //sair eh o nome do command
// sair da aplicação
this.destroyApp(true);
this.notifyDestroyed();
}
if (c==this.form2){
//mudará de tela
display.setCurrent(form2)
}
} //fim do commandAction
}
37
Capítulo 5
Interfaces
Em celulares, as interfaces variam entre um pequeno e simples display de duas cores até
complexos displays de milhares de cores.
java.swing e java.awt são bem conhecidas em JSE (Java Standart Edition - usado em desktops
e notebooks, por exemplo). J2ME não possui essas APIs, pois os celulares não possuem um
ambiente multi-janelas. Os pacotes de interface devem ser mais simples e adaptados para rodar
em celulares.
Vemos que a classe Display representa a tela do celular. As classes que representam janelas
em MIDP chamam-se Displayables. Deles, existem duas classes abstratas filhas: a Screen e a
Canvas. A classe Screen é a classe de interface gráfica que usa elementos de alto-nível. Já a
Canvas usa elementos de baixo nível (deve-se desenhar tudo "à mão").
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.1 Interface de Alto-Nível
Estudaremos aqui o uso da classe Screen, uma filha abstrata da classe Displayable, usada
para manipular elementos de alto-nível. Nela fazemos tudo de forma bem organizada no display.
Não se pode, com ela, fazer desenhos à mão livre no display.
A classe screen, por vez, têm mais filhas, sendo elas:
• TextBox;
• List;
• Alert;
• Form.
Iremos ver agora, cada um dessas classes, junto com exemplos, que devem ser feitos compilados
e rodados.
5.1.1 TextBox
O TextBox é bastante simples. Ele permite que o usuário entre ou edite algum texto. Isso pode
ser útil quando se precisar, em um programa, entrar com alguns dados como nome, telefone,
email, etc...
Necessita de quatro parâmetros em sua criação, como mostrado a seguir:
public TextBox(String title, String text, int maxSize, int constraints);
sendo "constraints"constantes da classe TextField, usadas para restringir o domínio do texto.
Vejamos as constraints:
• TextField.ANY: Qualquer caractere pode ser inserido.
• TextField.EMAILADDR: Entrada só pode ser um endereço de email.
• TextField.NUMBER: Entrada só pode ser um número inteiro.
• TextField.PASSWD: Caracteres digitados são substituídos por asteriscos.
• TextField.PHONENUMBER: Entrada só pode ser um número de telefone.
• TextField.URL: Entrada só pode ser uma URL.
Vejamos agora um exemplo no qual colocaremos um texto editável e também um ticker (es-
pécie de "letreiro"que fica no topo do midlet, "caminhando"), acompanhe os comentários:
TextBoxMIDlet
import javax . microedition . l c d u i . * ;
import javax . microedition . midlet . MIDlet ;
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
public class TextBoxMIDlet extends MIDlet {
5
/ / criando um objeto de TextBox
protected TextBox textBox ;
private Display display ;
10
/ / Definindo a quantidade máx de caracteres no TextBox
private static f i n a l int MAX_TEXT_SIZE = 800;
/ / metodo construtor do TextBox
15 public TextBoxMIDlet ( ) {
/ / s t r i n g e di ta vel
String s t r = "Esta eh uma mensagem editavel." ;
20 / / Criando o TextBox com c o n s t r a i n t
textBox = new TextBox ( "Exemplo com TextBox" , str , MAX_TEXT_SIZE,
TextField .ANY) ;
/ / Criando uma Ticker
Ticker t i c k e r = new Ticker ( "Isto eh um ticker. Indo da direita pra
esquerda..." ) ;
25 textBox . setTicker ( t i c k e r ) ;
display = Display . getDisplay ( this ) ;
}
30
protected void startApp ( ) {
/ / carrega o TextBox como janela p r i n c i p a l
display . setCurrent ( textBox ) ;
35 }
protected void pauseApp ( ) {
}
40 protected void destroyApp ( boolean unconditional ) {
}
}
5.1.2 List
List é um tipo de lista de ítens no qual se seleciona (ou não) algum (ou vários) elemento (s).
Sua forma é a seguinte:
List (String title, int listType) ,
onde listType é o tipo da lista, podendo ser uma dentre três opções: Implicit, Exclusive Multiple
Para se criar listas aonde os elementos são figuras, usa-se a seguinte construção:
List(String title, int listType, String[] strElements, Image[] imgElements)
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Para isso, deve-se criar um array de imagens.
Estudaremos o código seguinte:
ListMIDlet
import javax . microedition . l c d u i . * ;
import javax . microedition . midlet . MIDlet ;
public class L i s t M i d l e t extends MIDlet implements CommandListener {
5
/ / criando um objeto da classe L i s t
protected L i s t l i s t ;
private Display display ;
10
/ / Criando commands:
private Command exitCommand ; / / pra s a i r do MIDlet
private Command okCommand; / / pra selecionar
15 public L i s t M i d l e t ( ) {
/ / Criando os botões
exitCommand = new Command( "Sair" , Command. EXIT , 1) ;
okCommand = new Command( "Ok" , Command.OK, 1 ) ;
20
/ / Criando o L i s t
String [ ] elements = { "Elemento 1" ,"Elemento 2" , "Elemento 3" } ;
/ / definindo elementos de imagens nulos , pois nao as usaremos aqui
Image [ ] elementsImages = { null , null , null } ;
25 / / este exemplo de l i s t a e uma l i s t a de multiplas escolhas
l i s t = new L i s t ( "Isto e uma List" , L i s t . MULTIPLE, elements ,
elementsImages ) ;
/ / adicionando os eventos
l i s t .addCommand( exitCommand ) ;
30 l i s t .addCommand(okCommand) ;
l i s t . setCommandListener ( this ) ;
display = Display . getDisplay ( this ) ;
}
35
protected void startApp ( ) {
/ / carrega o L i s t como a janela atual .
display . setCurrent ( l i s t ) ;
}
40
protected void pauseApp ( ) {
}
protected void destroyApp ( boolean unconditional ) {
45 }
/ / Controlando os comandos do usuário
public void commandAction (Command command, Displayable displayable ) {
50 / / botão na t e l a l i s t f o i apertado
i f ( displayable == l i s t ) {
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
/ / O botão apertado f o i exitCommand .
i f (command == exitCommand ) {
55 / / definindo uma t e l a nula para s a i r
Display . getDisplay ( this ) . setCurrent ( null ) ;
destroyApp ( true ) ;
/ / n o t i f i c a a KVM que o MIDlet terminou .
60 notifyDestroyed ( ) ;
} else i f (command == okCommand) {
/ /O botão apertado f o i o okCommand
/ / aqui deve se colocar um evento r e l a t i v o a opção
escolhida na l i s t a
}
65 }
}
}
5.1.3 Alert
O Alert serve para, como o próprio nome diz, mostrar um alerta. Ele pode ser na forma de
uma simples mensagem "ERRO!"como também na forma de uma figura. Eles aparecem na tela
e depois somem depois de um tempo, ou após alguma confirmação ou ação (dependendo da
implementação). Sua forma é a seguinte:
Alert(String title, String alertText, Image alertImage, AlertType alertType) ,
colocando parâmetro alertImage como null, caso seja só textual.
O parâmetro AlertType define o tipo do alerta. Sendo que cada um possui ícones e sons
específicos (mas também podem ser mudados). Eles são:
• Alarm
• Error
• Info
• Warning
• Confirmation
Programa com um exemplo de Alert, aonde aparece uma mensagem de alerta ao se iniciar e
depois muda para um Form.:
AlertMIDlet
import javax . microedition . l c d u i . * ;
import javax . microedition . midlet . MIDlet ;
public class A l e r t M i d l e t extends MIDlet implements CommandListener {
5
/ / criando o objeto da classe A l e r t
protected A l e r t a l e r t ;
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
/ / objeto Form
10 private Form form ;
private Display display ;
private Command exitCommand ;
public A l e r t M i d l e t ( ) {
15 exitCommand = new Command( "Sair" , Command. EXIT , 1) ;
/ / Criando o A l e r t do t i p o ERROR.
a l e r t = new A l e r t ( "Exemplo com Alerta" ,"Isto e um alerta." , null ,
AlertType .ERROR) ;
20 / / Definindo o timeout do a l e r t (1 ,5 s ) .
a l e r t . setTimeout (1500) ;
/ / Criando um formulário para s e r v i r de fundo para o exemplo
form = new Form( "Exemplo com Alerta" ,new Item [ ] {new StringItem ( "Form"
, "Isto e um Form" ) } ) ;
25
form .addCommand( exitCommand ) ;
form . setCommandListener ( this ) ;
display = Display . getDisplay ( this ) ;
30 }
protected void startApp ( ) {
/ / Define o A l e r t como janela atual e depois mostra o form .
display . setCurrent ( a l e r t , form ) ;
35 }
protected void pauseApp [ [ egg ] ] {
}
40 protected void destroyApp ( boolean unconditional ) {
}
/ / Controlando os comandos do usuário
public void commandAction (Command command, Displayable displayable ) {
45
i f ( displayable == form ) {
i f (command == exitCommand )
{
Display . getDisplay ( this ) . setCurrent ( null ) ;
50 destroyApp ( true ) ;
notifyDestroyed ( ) ;
}
}
55 }
}
5.1.4 Form
O Form é um formulário que permite a composição de vários ítens nele próprio. Ele já foi mos-
trado em segundo plano em outros exemplos (como no HelloWorld). Iremos apenas trabalhar em
um exemplo em que se tem várias coisas (tipos de ítens) já vistas em um form só. Implementare-
mos um form com:
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• textField > texto editável;
• stringItem > uma string como item;
• spacer > espaço em branco em um form;
• imageItem > uma imagem como item (lembrando que a imagem deve estar no mesmo
pacote);
• gauge > item graduado (como o indicador de bateria do celular);
• choiceGroup > uma lista de com opções de escolha;
• dateField > campo com data (editável).
FormMIDlet
import javax . microedition . midlet . * ;
import javax . microedition . l c d u i . * ;
public class FormMidlet extends MIDlet implements CommandListener , ItemStateListener
5 {
/ / Nosso formulario
private Form form ;
/ / Itens para serem colocados no formulario
10 private ChoiceGroup choiceGroup ;
private DateField dateField ;
private TextField t e x t F i e l d ;
private StringItem stringItem ;
private ImageItem imageItem ;
15 private Gauge gauge ;
private Spacer spacer ;
private Command exitCommand ;
20 public FormMidlet ( )
{
try {
exitCommand = new Command( "Sair" ,Command. EXIT , 1 ) ;
25
/ / Criando nosso formulário
form = new Form( "Exemplo com Form" ) ;
/ / Criando os ítens do nosso formulário
30 choiceGroup = new ChoiceGroup ( "ChoiceGroup" , ChoiceGroup .
EXCLUSIVE,new String [ ] { "Opcao 1" , "Opcao 2" , "Opcao 3" } ,
new Image [ ] { null , null , null } ) ;
dateField = new DateField ( "DateField" , DateField .DATE, null ) ;
t e x t F i e l d = new TextField ( "TextField" ,"texto editavel" ,50 ,
TextField .ANY) ;
stringItem = new StringItem ( "StringItem" , "texto nao editavel"
, Item .BUTTON) ;
imageItem = new ImageItem ( "ImageItem" ,Image . createImage ( "/
image.jpg" ) , ImageItem .LAYOUT_CENTER, "Isso e um ImageItem" ) ;
/ / a imagem deve estar no mesmo pacote
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
35 gauge = new Gauge( "Gauge" , true ,10 ,0) ;
spacer = new Spacer (80 ,50) ;
/ / Adicionando os ítens ao nosso formulário
form . append ( t e x t F i e l d ) ;
40 form . append ( stringItem ) ;
form . append ( spacer ) ;
form . append ( imageItem ) ;
form . append ( gauge ) ;
form . append ( choiceGroup ) ;
45 form . append ( dateField ) ;
form .addCommand( exitCommand ) ;
form . setCommandListener ( this ) ;
50 / / indicando que classe i r a escutar por mudanças no estado dos
ítens
form . setItemStateListener ( this ) ;
} catch ( Exception ex ) {
ex . printStackTrace ( ) ;
55 }
}
public void startApp ( ) {
60 / / Setando o nosso form como o display atual
Display . getDisplay ( this ) . setCurrent ( form ) ;
}
public void pauseApp ( ) {
65 }
public void destroyApp ( boolean unconditional ) {
}
70 public void commandAction (Command command, Displayable displayable ) {
i f ( displayable == form ) {
i f (command == exitCommand ) {
Display . getDisplay ( this ) . setCurrent ( null ) ;
75 destroyApp ( true ) ;
notifyDestroyed ( ) ;
}
}
}
80
/ / Metodo invocado pela KVM quando algum item do form muda de estado .
public void itemStateChanged ( Item item ) {
i f ( item == choiceGroup ) {
/ / t r a t a r mudança de estado
85 } else i f ( item == dateField ) {
/ / t r a t a r mudança de estado
} else i f ( item == t e x t F i e l d ) {
/ / t r a t a r mudança de estado
} else i f ( item == gauge ) {
90 / / t r a t a r mudança de estado
} else i f ( item == imageItem ) {
/ / t r a t a r mudança de estado
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
} else i f ( item == spacer ) {
/ / t r a t a r mudança de estado
95 } else i f ( item == stringItem ) {
/ / t r a t a r mudança de
estado
}
}
}
5.2 Interface de Baixo-Nível
A inteface de baixo-nível é constituída pela classe Canvas, filha abstrata da classe Displaya-
ble. Nela trabalhamos com a manipulação livre de todos os elementos que são mostrados na tela
do celular. No Canvas, se usa a idéia de desenhos, ou seja, o que será mostrado na tela terá
que ser "desenhado". Isso nos oferece recursos "ilimitados"em relação à apresentação gráfica
para o usuário. Programas para dispositivos móveis, geralmente, usam a interface de baixo-nível,
para que o programa fique de acordo com o gosto do programador ou da pessoa/empresa para
quem está se desenvolvendo o programa. Os jogos são exemplos de programas que exploram
amplamente os recursos da classe Canvas.
Para se ter uma idéia do uso da classe Canvas e da sua associação à uma tela com dese-
nhos, faremos um simples desenho na tela : uma espécie de túnel. Analisaremos o exemplo a
seguir:
Classe que extende Canvas
import javax . microedition . l c d u i . * ;
import javax . microedition . midlet . * ;
public class TunelCanvas extends Canvas implements CommandListener {
5
private TunelMIDlet midlet ;
/ * *
* constructor
10 * /
public TunelCanvas ( TunelMIDlet midlet ) {
this . midlet = midlet ;
15 try {
setCommandListener ( this ) ;
addCommand(new Command( "Sair" , Command. EXIT , 1) ) ;
} catch ( Exception e ) { / / tratando excecao
20 e . printStackTrace ( ) ;
}
}
/ * *
25 * ####metodo paint #####
* e aqui que faz todos os desenhos
* /
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
public void paint ( Graphics g ) {
int largura = getWidth ( ) ;
30 int a l t u r a = getHeight ( ) ;
/ / muda a cor atual para preto ( valor em hexadecimal )
g . setColor (0X000000 ) ;
/ / preenche o fundo com a cor atual ( preto )
35 g . f i l l R e c t (0 ,0 , largura , a l t u r a ) ;
/ * * Aqui desenharemos um túnel .
* ele é f e i t o com uma sucessao de desenhos simples ( c í r c u l o )
* /
40 int raio = 70;
int i =0;
int hex=0x000300 ;
int cor=0x001000 ;
/ * * loop que dará a impressão de profundidade
45 * sendo printados vários cí rc u l o s de raiso diferentes
*e com a origem modificada a cada interação
* /
for ( i =0; i <=100; i ++) {
cor = cor + hex ;
50 g . setColor ( cor ) ;
/ / função para se desenhar um c í r c u l o
g . drawArc ( a l t u r a /2 − raio−i +30, largura /2 +50 − raio−i , raio−
i , raio−i , 0 , 360) ;
}
cor=0x001000 ;
55 for ( i =0; i <=70; i ++) {
cor = cor + hex ;
g . setColor ( cor ) ;
g . drawArc ( a l t u r a /2 − raio−i +30, largura /2 +50 − raio−i , raio +
i , raio +i , 0 , 360) ;
}
60 }
public void commandAction (Command command, Displayable displayable ) {
midlet . destroyApp ( true ) ;
midlet . notifyDestroyed ( ) ;
65 }
}
Classe Principal
import javax . microedition . midlet . * ;
import javax . microedition . l c d u i . * ;
5 public class TunelMIDlet extends MIDlet {
private TunelCanvas lineCanvas ;
public TunelMIDlet ( ) {
10 lineCanvas = new TunelCanvas ( this ) ;
}
public void startApp ( ) {
Display . getDisplay ( this ) . setCurrent ( lineCanvas ) ;
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
15 }
public void pauseApp ( ) {
}
20 public void destroyApp ( boolean unconditional ) {
}
}
Crie as classes ( TunelCanvas.java e TunelMIDlet.java ) com o conteúdo acima, compile e
execute para ver o resultado.
Nesse exemplo esse "efeito 3D"se deu apenas à uma sucessão de círculos simples e mu-
dança de cores que no final deu um efeito de profundidade. Porém existe uma API para constru-
ção de gráficos 3D, o que oferece amplos recursos no quesito de interface gráfica (muito usado
em jogos).
48

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Tcl tk
Tcl tkTcl tk
Tcl tk
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Selinux
SelinuxSelinux
Selinux
 
Screen
ScreenScreen
Screen
 
Samba
SambaSamba
Samba
 
X dialog
X dialogX dialog
X dialog
 
Pascal
PascalPascal
Pascal
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Wx python
Wx pythonWx python
Wx python
 
Inkscape
InkscapeInkscape
Inkscape
 
Zope
ZopeZope
Zope
 
Qemu
QemuQemu
Qemu
 
Uml
UmlUml
Uml
 
Sql
SqlSql
Sql
 
Squid guard
Squid guardSquid guard
Squid guard
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Drupal
DrupalDrupal
Drupal
 
Linguagem Ruby
Linguagem RubyLinguagem Ruby
Linguagem Ruby
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Ltsp
LtspLtsp
Ltsp
 

Semelhante a J2me

Fw builder
Fw builderFw builder
Fw builderTiago
 
Intro micro software
Intro micro softwareIntro micro software
Intro micro softwareTiago
 
Inkscape
InkscapeInkscape
InkscapeTiago
 
Pen linux
Pen linuxPen linux
Pen linuxTiago
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linuxTiago
 
Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem rubyTiago
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoopsTiago
 
Jabber
JabberJabber
JabberTiago
 
Gerenciamento de projetos
Gerenciamento de projetosGerenciamento de projetos
Gerenciamento de projetosTiago
 
Quanta
QuantaQuanta
QuantaTiago
 
Nessus
NessusNessus
NessusTiago
 
Nagios2
Nagios2Nagios2
Nagios2Tiago
 
Dovecot
DovecotDovecot
DovecotTiago
 
Iptables
IptablesIptables
IptablesTiago
 

Semelhante a J2me (20)

Nvu
NvuNvu
Nvu
 
Fw builder
Fw builderFw builder
Fw builder
 
Plone
PlonePlone
Plone
 
Mrtg
MrtgMrtg
Mrtg
 
Intro micro software
Intro micro softwareIntro micro software
Intro micro software
 
Ferm
FermFerm
Ferm
 
Inkscape
InkscapeInkscape
Inkscape
 
Pen linux
Pen linuxPen linux
Pen linux
 
Ltsp
LtspLtsp
Ltsp
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linux
 
Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem ruby
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoops
 
Ftp
FtpFtp
Ftp
 
Jabber
JabberJabber
Jabber
 
Gerenciamento de projetos
Gerenciamento de projetosGerenciamento de projetos
Gerenciamento de projetos
 
Quanta
QuantaQuanta
Quanta
 
Nessus
NessusNessus
Nessus
 
Nagios2
Nagios2Nagios2
Nagios2
 
Dovecot
DovecotDovecot
Dovecot
 
Iptables
IptablesIptables
Iptables
 

Mais de Tiago

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 
C# classes
C#   classesC#   classes
C# classesTiago
 

Mais de Tiago (20)

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 
C# classes
C#   classesC#   classes
C# classes
 

Último

Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfAlissonMiranda22
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila RibeiroMarcele Ravasio
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 

Último (20)

Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdf
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 

J2me

  • 2. Sumário I Sobre essa Apostila 3 II Informações Básicas 5 III GNU Free Documentation License 10 IV J2ME 19 1 O que é J2ME ? 20 2 Plano de ensino 21 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3 Introdução 24 3.1 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Breve História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4 Fazendo o Primeiro Programa 29 4.1 MIDlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2 Iniciando no NetBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.5 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5 Interfaces 38 5.1 Interface de Alto-Nível . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.1.1 TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.1.2 List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.1.3 Alert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.1.4 Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.2 Interface de Baixo-Nível . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2
  • 4. Parte I Sobre essa Apostila 3
  • 5. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.) O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora. Autores A autoria deste é de responsabilidade de Rafael Mendes Marques de Brito (rafael@cdtc.org.br) . O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 4
  • 7. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível; • Os 10 mandamentos do aluno de Educação a Distância; • Como participar dos foruns e da wikipédia; • Primeiros passos. É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br). 6
  • 8. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância; • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas; • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores; • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos; • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais; • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real; • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre; • 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens e descobertas; • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto - chave na comunicação pela Internet; • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: . O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 7
  • 9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: . Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8
  • 10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervossismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 9
  • 11. Parte III GNU Free Documentation License 10
  • 12. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF (Traduzido pelo João S. O. Bueno através do CIPSGA em 2001) Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi- leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL. This is an unofficial translation of the GNU General Documentation License into Brazilian Por- tuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDL–only the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licença de Documentação Livre GNU Versão 1.1, Março de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas não é permitido alterá-lo. INTRODUÇÃO O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo, com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros. Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge- ral (GNU GPL), que é um copyleft para software livre. Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin- cipalmente para trabalhos cujo propósito seja de introdução ou referência. APLICABILIDADE E DEFINIÇÕES Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um 11
  • 13. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF licenciado e é referida como "você". Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra língua. Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex- clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seção Secundária pode não explicar nada de matemática). Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci- onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo. As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença. Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença. Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica- mente, representada num formato cuja especificação esteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de- sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é "Transparente"é chamada de "Opaca". Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim- ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos e editados apenas com processadores de texto proprietários, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de saída. A "Página do Título"significa, para um livro impresso, a página do título propriamente dita, mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos que não tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe- minente do título do trabalho, precedendo o início do corpo do texto. 12
  • 14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF FAZENDO CÓPIAS EXATAS Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres- cente nenhuma outra condição, quaisquer que sejam, às desta Licença. Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com- pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias, você também precisa respeitar as condições da seção 3. Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também pode exibir cópias publicamente. FAZENDO CÓPIAS EM QUANTIDADE Se você publicar cópias do Documento em número maior que 100, e a nota de licença do Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com- pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa verdadeira, e continuar os outros nas páginas adjacentes. Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente completa do Documento acessível publicamente em uma rede de computadores, à qual o público usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel- mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma na localização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta- mente ou através de seus agentes ou distribuidores) daquela edição para o público. É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você com uma versão atualizada do Documento. 13
  • 15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF MODIFICAÇÕES Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se- ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença, com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, você precisa fazer o seguinte na versão modificada: A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do- cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se o editor original daquela versão lhe der permissão; B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá- veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico abaixo; G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa requeridos dados na nota de licença do Documento; H. Incluir uma cópia inalterada desta Licença; I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um item descrevendo a Versão Modificada, tal como descrito na sentença anterior; J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu- mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção "Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira der sua permissão; K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da 14
  • 16. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri- buidores e/ou dedicatórias dados; L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção; M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão Modificada; N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro título dado a uma Seção Invariante. Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci- sam ser diferentes de qualquer outro título de seção. Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual- quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definição oficial de um padrão. Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente , e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Versão Modificada. COMBINANDO DOCUMENTOS Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com- binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença. O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de 15
  • 17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado. Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver- sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as seções entituladas como "Endosso". COLETÂNEAS DE DOCUMENTOS Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia exata de cada um dos Documentos em todos os outros aspectos. Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta Licença em todos os outros aspectos relacionados à cópia exata daquele documento. AGREGAÇÃO COM TRABALHOS INDEPENDENTES Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se- parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver- são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim compilados, e eles não são trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento, então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Senão eles precisarão aparecer nas capas de todo o agregado. TRADUÇÃO Tradução é considerada como um tipo de modificação, então você pode distribuir traduções do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in- clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a 16
  • 18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF versão original em Inglês desta Licença, a versão original em Inglês prevalecerá. TÉRMINO Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres- samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen- ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total acordo com esta Licença. REVISÕES FUTURAS DESTA LICENÇA A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen- tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja http://www.gnu.org/copyleft/. A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença, você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licença para seus documentos Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença no documento e ponha as seguintes notas de copyright e licenças logo após a página de título: Copyright (c) ANO SEU NOME. É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft- ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li- cença está inclusa na seção entitulada "Licença de Documentação Livre GNU". Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda- mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre, 17
  • 19. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF tal como a GNU General Public License, para permitir o seu uso em software livre. 18
  • 21. Capítulo 1 O que é J2ME ? J2ME é uma tecnologia Java voltada para desenvolvimento em microdispositivos. No curso de J2ME você aprenderá conceitos básicos sobre essa tecnologia, fará alguns programas-exemplos e terá uma visão geral de desenvolvimento para celulares (não incluindo a parte de jogos e conectividade). 20
  • 22. Capítulo 2 Plano de ensino 2.1 Objetivo Capacitar o usuário para a familiarização com a tecnologia J2ME. 2.2 Público Alvo Programadores em Java que queiram aprender sobre a tecnologia J2ME. 2.3 Pré-requisitos Os usuários deverão ser, necessariamente, funcionários de empresas públicas e ter conheci- mentos básicos para operar um computador. Também é necessário que usuário tenha conheci- mentos básicos em Java. 2.4 Descrição O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle como ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é composto por um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do Audacity é a 1.2.3, caso possua outra versão instalada, podem ocorrer poucas diferenças. Todo o material está no formato de lições e estará disponível ao longo do curso. As lições poderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien- tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades advindas do "desconhecimento"sobre o mesmo. Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado anteriormente que também conterá perguntas sobre os textos indicados. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. Os instrutores estarão à sua disposição ao longo de todo curso. Qualquer dúvida deve ser disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e esclarecimentos. 21
  • 23. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 2.5 Metodologia O curso está dividido da seguinte maneira: 2.6 Cronograma • Instalação; • Introdução e Arquitetura do J2ME; • MIDP; • Fazendo o Primeiro Programa; • Threads; • Eventos; • Interface de Alto Nível; • Interface de Baixo Nível. As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces- sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor do que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão considera- das para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante a avaliação final. 2.7 Programa O curso de J2ME oferecerá o seguinte conteúdo: • Introdução e Instalação; • Alguns programas exemplos. 2.8 Avaliação Toda a avaliação será feita on-line. Aspectos a serem considerados na avaliação: • Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento; • Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados. Instrumentos de avaliação: 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Participação ativa nas atividades programadas. • Avaliação ao final do curso. • O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com a fórmula abaixo: • Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições • AF = Avaliações 2.9 Bibliografia • Site official: http://developers.sun.com/mobility/ 23
  • 25. Capítulo 3 Introdução 3.1 Instalação Temos à nossa disposição uma variedade de métodos de instalação do Java, podendo variar dependendo da distribuição GNU/Linux utilizada. É importante notar que diferentes métodos de instalação poderão prover versões diferentes do software. Neste curso, por exemplo, utilizaremos a versão 1.6.0. Para facilitar um pouco no início da programação J2ME usaremos uma IDE, o NetBeans. Vale ressaltar que o uso de alguma IDE em específico ou até o não uso de uma, fica a critério do próprio aluno. Porém, recomenda-se que o aluno siga a nossa orientação. Podemos diferenciar os métodos de instalação basicamente entre aqueles que utilizam pa- cotes pré-compilados da própria distribuição ou aqueles que utilizam um binário genérico para Linux, provido pela própria Sun Microsystems. Para se programar em J2ME, precisa-se de três requisitos básicos: • JDK (Java Development Kit); • WTK (Wireless Toolkit) > especificamente para J2ME; • Alguma IDE > isso fica a critério do programador. No nosso curso faremos apenas o download e instalação do: • NetBeans + JDK ( IDE integrada com o JDK); • NetBeans Mobility Pack (anexo para programação para móveis no NetBeans, incluindo o WTK). Instalação através de pacote binário para ambientes Linux O primeiro método que iremos abordar quanto à instalação do Java será o da instalação do pacote binário provido pela Sun. Para atingir sucesso por esse método de instalação devemos saber como obter esse pacote e instalá-lo, além de adicionar entradas apropriadas nos arquivos de configuração do sistema. O pacote binário do NetBeans+JDK pode ser obtido a partir do site da Sun, neste link. Esta versão é o Netbeans 5.5.1 com o JDK 6. Deve-se então marcar a caixa "Accept"e clicar no 24
  • 26. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF segundo link (se for realmente para Linux) para download do arquivo. Só para conferir, o nome do arquivo deve ser "jdk-6u1-nb-5_5_1-linux-ml.bin" Pronto, agora o pacote está sendo baixado. Após obtido o pacote você deverá executá-lo. Mas antes, certifique-se de que você esteja logado no sistema como Superusuario(root). Para tal, deve-se digitar o comando em um terminal: $ su Caso ele não esteja executável, pode ser necessário dar permissões de execução ao arquivo utilizando o comando dentro do diretório onde ele estiver: # chmod +x jdk-6u1-nb-5_5_1-linux-ml.bin Feito isso, execute o arquivo com o comando: # ./jdk-6u1-nb-5_5_1-linux-ml.bin Se tudo for seguido como recomendado, o NetBeans e o JDK deverão ser instalados automa- ticamente dentro do diretório opt , assim como mostra a figura: 25
  • 27. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Pronto, instalamos já a IDE NetBeans junto com o JDK. Agora precisaremos instalar o Mobility Pack do NetBeans, fazendo o download dele neste link. O arquivo se chama "netbeans_mobility- 5_5_1-linux.bin". Pronto, agora basta fazer o mesmo procedimento que foi feito na instalação do NetBeans; Dar permissão ao arquivo e executá-lo. Automaticamente será encontrado o diretório onde foi instalado o JDK, basta apenas verificar. Bem efetuadas as instalações, já temos o ambiente pronto para desenvolver em J2ME. 3.2 Breve História Em 1991, engenheiros da Sun Microsystems tiveram a idéia de criar uma linguagem que pu- desse ser uma tecnologia inovadora e ímpar naquele momento. Eles acreditavam que o futuro es- tava na convergência entre computadores e eletrodomésticos. Então, baseando-se nessa crença foi criado o Oak (carvalho em inglês), linguagem altamente portável e voltada para sistemas de baixa complexidade. No entanto, o ideal pareceu estar muito distante da sua real aplicabilidade e, por isso, o Oak encontrou sérias dificuldades mercadológicas, impedindo o "sonho"da Sun Microsystems de se concretizar. Perseverante, a Sun prosseguiu com o projeto voltando-se para uma nova tendência, um nicho de mercado emergente e até então desconhecido, a Internet. A partir dai juntamente com o "boom"desse novo meio de comunicação é que os engenheiros da Sun encontraram o caminho certo para desenvolvimento e utilização do Oak. Mas, por problemas de direitos auto- rais o Oak passa a ser chamado de Java e, em 1995, o sonho da Sun se realiza. É lançada oficialmente a linguagem Java, feita inicialmente para se disseminar pela Internet, por meios de programas (applets) que se executavam dentro dos browsers. Em 1999, a Sun Microsystems lança o JME ( Java Mobility Edition), retomando um pouco da idéia original do Oak de se programar para dispositivos móveis e softwares embarcados. Desde o seu lançamento, centenas de corporações na área de dispositivos móveis aderiram a essa tecnologia. Mais tarde, ela ganha a versão 2.0, o que a levou a ser conhecida como ’J2ME’[1]. [1] Esse termo já está caindo em desuso hoje em dia, possibilitando que também use- mos o termo 'JME'. Neste curso iremos usar o ainda mais comum 'J2ME'. 3.3 Introdução Plataformas de Desenvolvimento para Dispositivos Móveis: -Windows Mobile > SO(SistemaOperacional) para dispositivos móveis da Microsoft; -SymbianOS > SO otimizado para terminais móveis; -Brew > Voltado para o desenvolvimento de aplicativos apenas para celulares CDMA; -ExEn > Voltado para o desenvolvimento de jogos, visando principalmente o mercado euro- peu; -Mophun > Outra linguagem voltada para o desenvolvimento de jogos para celulares; -J2ME > Voltado para odesenvolvimento de aplicativos para dispositivos móveis. 26
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Nesse curso abordaremos a Plataforma J2ME. O Java 2 Micro Edition é usado para dispositivos muito limitados. Ou seja, pouca capaci- dade de processamento, pequena fonte de energia e pouca memória, problemas que hoje em dia estão sendo contornados pelo uso de memórias externas. Essa plataforma foi feita para se conseguir rodar aplicações assim como acontece na J2SE, só que em micro dispositivos. Alguns até consideram que a J2ME é nada mais do que um compacto da J2SE, o que não deixa de ser verdade até certo ponto. Para construção do J2ME foi preciso fazer uma grande modificação na JSE, consistindo basi- camente de remoções de certas propriedades e adaptação de outras. Tudo isso com o propósito de melhor se adequar à arquitetura dos micro dispositivos. A JVM (Java Virtual Machine), por exemplo, foi adaptada para se criar a JKVM (Java Kilo Virtual Machine), sendo a primeira na ordem de megas e a segunda na ordem de kilos, justamente por causa da memória reduzida. 3.4 Arquitetura Configurações (CDC/CLDC) J2ME oferece duas "configurações": a CDC (Connect Device Configuration) e a CLDC (Con- nect Limited Device Configuration), que se caracterizam de acordo com o tipo de dispositivo. Connect Device Configuration - CDC: Para dispositivos maiores em termos de memória, processamento e energia, geralmente li- gados por fios. Exemplos: Televisores interativos, set-top box (para tvs digitais), sistemas de navegação de carro... Connect Limited Device Configuration - CLDC: A tecnologia CLDC é um subconjunto do CDC. Foi feito para dispositivos mais limitados, com grande ou total portabilidade. Nosso foco se encontrará aqui, visto que é aqui que se enquadram certos dispositivos tão corriqueiros em nosso dia-a-dia. Exemplos: celulares com tecnologia JAVA, smartphones, pagers, PDAs. Perfis Os perfis nos fornecem um conjunto de APIs combinadas para formar um ambiente especí- fico. Junto com as configurações proverão acesso a propriedades específicas dos dispositivos. Abaixo, serão citados alguns perfis. Mobile Information Device Profile(MIDP) » Perfil de máximo nível na configuração CLDC, feito para celulares e PDAs. Foundation Profile(FP) » É o perfil de nível mais baixo dentre os outros perfis de CDC. Personal Profile(PP) » Perfil CDC para suportes à applets e interface gráfica AWT. Personal Basis Profile(PBP) »Divisão do PP que suporta um nível básico de interface gráfica. 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Neste curso abordaremos o MIDP, que se divide em sua antiga versão MIDP1.0 e a sua mais nova MIDP2.0. 28
  • 30. Capítulo 4 Fazendo o Primeiro Programa Falaremos agora um pouco mais do perfil MIDP. Ele é um ambiente de desenvolvimento para MIDs e oferece muita eficiência e liberdade. Algumas características: • 128kB de memória não-volátil para JAVA; • 32KB de memória volátil para tempo de execução; • 8KB de memória não-volátil de para armazenamento de dados; • uma tela com o mínimo de 96x54 pixels; • Capacidade de entrada de dados: teclado, tela touch-screen, etc. MIDP 1.0 E MIDP 2.0: O perfil MIDP 2.0 é uma versão mais nova do perfil MIDP. Ele apresenta funcionalidades que o MIDP 1.0 não apresenta. As funcionalidades originadas na versão 2.0 mais marcantes são clas- ses próprias para jogo (GameAPI), comunicação de dados por https (mais segura), manipulação de sons(MediaAPI) e segurança no geral. Com a versão 1.0 não se pode fazer coisas como: • Pontos Flutuantes: double e float; • Apesar de existiroGarbage Collector, não se pode utilizar o método automático; • MultiThreading não possui os métodos pause(), resume(), stop() e interrupt(); • Uso de métodos nativos; • Em java.lang.Object não se tem o método finallize(); Entre outros. 4.1 MIDlets MIDlets são aplicativos J2ME desenvolvidos dentro do perfil MIDP. Tem como principal carac- terística a portabilidade, pode-se rodar em qualquer ambiente desde que esse tenha suporte à 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF J2ME-MIDP. Ciclo de vida do MIDlet Os MIDlets possuem um ciclo de vida. Um MIDLet pode estar em 3 estados: ativado, pausado e terminado (ou destruído). • public void startApp(): é o método que será chamado no início de execução do aplica- tivo. Ele será chamado logo depois do construtor da classe. Geralmente aqui é definido o componente que será mostrado na tela. • public void pauseApp(): é o método que será chamado quando houver uma interrupção na execução do aplicativo por parte do sistema operacional do aparelho, por exemplo, o recebimento de uma ligação, mensagem de bateria fraca, etc. Aqui deve-se criar um meio de congelar(pause) a aplicação para que ela possa ser recuperada corretamente depois da interrupção. • public void destroyApp(boolean b): é o método chamado quando o aplicativo é fechado. Aqui pode-se colocar códigos para persistir alguma informação que você queira recuperar nas próximas vezes que abrir o aplicativo. É importante lembrar que esses três métodos devem estar presentes em qualquer classe que herde de MIDlet. Porém, não precisam conter código dentro deles, a não ser o startApp, que é onde chamamos um componente Displayable para a tela. 4.2 Iniciando no NetBeans Iremos nesta lição, programar, compilar e rodar o nosso primeiro MIDlet. Antes, iremos ver algumas coisas básicas do NetBeans como: criar, compilar e rodar um programa. 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF O primeiro passo é criar um novo projeto. Acompanhe a figura a seguir: Selecione "Mobile Application"dentro da categoria "Mobile"e clique em "Próximo". Agora, escolha o nome do projeto. No exemplo foi usado "Primeiro Programa". Desmarque a caixa "Create Hello MIDlet", assim como a figura mostra: Clique em "Finalizar". 31
  • 33. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Pronto, nosso projeto está criado. O segundo passo é criar um novo arquivo. Acompanhe a figura abaixo: Selecione "MIDlet"dentro da categoria "MIDP". Clique em "próximo". Pronto! Já temos um projeto criado e um arquivo. Agora é só começar nosso programa. 32
  • 34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.3 Hello World Faremos um midlet simples, o clássico "HelloWorld". É bom se iniciar com o HelloWorld para mostrar que J2ME não tem nenhum mistério. Bem, primeiramente vamos ver o código, as explicações virão comentadas. Examinem e façam o programinha abaixo. import javax . microedition . midlet . * ; / / importando a b i b l i o t e c a midlet e l c d u i import javax . microedition . l c d u i . * ; 5 / / aqui a classe concreta HelloWorld estende à classe abstrata MIDlet public class HelloWorld extends MIDlet { / / criando um objeto da classe Display , ele representará a t e l a do c e l u l a r private Display display ; / / criando o StringItem que vai receber a nossa s t r i n g 10 private StringItem h e l l o s t r i n g ; / / criando um Form private Form f o r m u l a r i o P r i n c i p a l ; public HelloWorld ( ) / / metodo construtor 15 { display=Display . getDisplay ( this ) ; / / associa o objeto display à t e l a do c e l u l a r f o r m u l a r i o P r i n c i p a l = new Form( "Helo" ) ; / / adiciona um t í t u l o ao nosso form / / passamos a s t r i n g para o objeto h e l l o s t r i n g . O primeiro parâmetro é o t í t u l o que o h e l l o s t r i n g terá h e l l o s t r i n g = new StringItem ( "" ,"Hello World!" ) ; 20 / / faz−se um append do h e l l o s t r i n g com f o r m u l a r i o P r i n c i p a l f o r m u l a r i o P r i n c i p a l . append ( h e l l o s t r i n g ) ; / / assim o StringItem f i c a r á " colado " no form . } / * 25 * abaixo temos as 3 classes que todo MIDlet deve t e r * / public void startApp ( ) { display . setCurrent ( f o r m u l a r i o P r i n c i p a l ) ; / / carrega o f o r m u l a r i o P r i n c i p a l } 30 public void pauseApp ( ) { } public void destroyApp ( boolean unconditional ) { 35 } } / / fim MIDlet −−−−−−−−−−−−−−−− Observem que os métodos startApp ,pauseApp e destroyApp sempre devem constar nos MIDlets, mesmo que o pauseApp e o destroyApp estejam sem conteúdo. Pronto, aí está o Hello World, agora compilem. 33
  • 35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Agora basta compilar e rodar, assim como mostra a figura: Nosso programa então abrirá no emulador do WTK (Wireless Toolkit) e deverá ser mostrado como na figura: O emulador mostrado na figura faz parte de outra versão do WTK. A diferença é apenas no layout. 34
  • 36. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.4 Threads Veremos agora um RESUMO de threads, para que possamos usar no restante do curso. Em Java, pode-se lançar múltiplas atividades dentro de um único processo. A isso chamamos Threads ou MultiThreading. Um programa em execução é dito como um processo. Um processo em adamento aloca diversos recursos como memória, uso do processador e outros, sendo que o sistema operacional é o responsável por esse controle. Já quem controla as várias threads dentro do programa é próprio interpretador Java. Por isso o uso de threads proporciona um maior desempenho em ambientes mulltiprocessados, simplifica a modelagem de algumas aplicações e tem um custo menor de gerenciamento em relação aos processos. Há duas maneiras de se implementar threads em Java, usando-se herança da classe Thread ou implementando uma interface da classe Runnable. Criando Threads Uma thread têm os seguintes estados: • Criada: instância de Thread criada, mas segmento não iniciado; • Executável: método start() chamado; está esperando instrução para ser executado; • Suspensa (espera/bloqueio): ativo, mas não está barrado para execução. Pode tornar a ser executável. Espera por recurso ( I/O) ou causada pelo código; • Em Execução: thread sendo executada; • Inativa: quando o método run() é concluído. Principais Métodos: • run() - Executa as atividades da thread. Se este método finaliza, a thread também o faz; • start() - Determina a execução da thread. Chama o método run() antes de finalizar; • sleep(int x) - Coloca a thread para dormir por x milisegundos; • join() - Espera o término da thread para qual foi mandada a mensagem para poder ser liberada; 35
  • 37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • yeld()- cede a vez para outro segmento; • interrupt() - Interrompe a execução da thread e cede a vez para outro segmento; • interrupted() - Testa se a thread está ou não está interrompida. Prioridades de Threads Em Java, a prioridade é determinada como um valor inteiro de 1 à 10. A prioridade 10 é a maior, a 1 é a menor e a 5 é a prioridade padrão. A thread herda a prioridade da thread que acriou. Métodos: void setPriority(int prioridade); int getPriority(); 4.5 Eventos Nos dispositivos J2ME a tela é muito pequena e fica ruim usar muitos "botões"na tela para serem "clicados", assim como em J2SE. Uma alternativa é a entrada pelos botões do próprio teclado (ao invés dos botões das telas). A maioria dos aparelhos possuem 2 botões principais (chamados de SoftKeys) : um na direita e outro na esquerda (definidos como reject e accept, previous e foward, respectivamente). Porém, não quer dizer que podemos usar só estes 2 botões. São os commands que fazem a interação entre o usuário e a aplicação. Os commands podem usar tanto as softkeys, quanto as outras teclas, ítens de menus e etc. Alguns tipos de Command: -back, exit, stop, cancel, screen, ok, help, item Primeiro de tudo, para se usar os commands, devemos fazer com que a classe do MIDlet implemente a classe CommanListener. Ex: public HelloWorld extends MIDlet implements CommandListener{ ... } Assim como foi usado o "append"no programa passado, usaremos o "addCommand"para adicionar os comandos desejados. Displayable.setCommandListener() é o método que relaciona qual classe irá fazer o uso dos eventos do teclado. CommandListener é a interface entre o teclado e as classes que o chamam. O método commandAction() é acionado quando um evento ocorre, identificando o evento e fazendo a sua ação associada. Sua forma é: commandAction(Command c, Displayable d) { //eventos } Usando como parâmetros o comando recebido e o Displayable atual. Dentro do commandAction incluiremos alguns eventos, com suas respectivas ações relaci- onadas. A implementação é simples e intuitiva, feita com um simples if (c == this.comando). Veremos: 36
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF public void commandAction(Command c, Displayable d) { if (c == this.comando1) { //acao1 } if (c == this.comando2 ) { //acao2 } //podemos adicionar aqui mais eventos... //veja 2 exemplos implementados if (c == this.sair) { //sair eh o nome do command // sair da aplicação this.destroyApp(true); this.notifyDestroyed(); } if (c==this.form2){ //mudará de tela display.setCurrent(form2) } } //fim do commandAction } 37
  • 39. Capítulo 5 Interfaces Em celulares, as interfaces variam entre um pequeno e simples display de duas cores até complexos displays de milhares de cores. java.swing e java.awt são bem conhecidas em JSE (Java Standart Edition - usado em desktops e notebooks, por exemplo). J2ME não possui essas APIs, pois os celulares não possuem um ambiente multi-janelas. Os pacotes de interface devem ser mais simples e adaptados para rodar em celulares. Vemos que a classe Display representa a tela do celular. As classes que representam janelas em MIDP chamam-se Displayables. Deles, existem duas classes abstratas filhas: a Screen e a Canvas. A classe Screen é a classe de interface gráfica que usa elementos de alto-nível. Já a Canvas usa elementos de baixo nível (deve-se desenhar tudo "à mão"). 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.1 Interface de Alto-Nível Estudaremos aqui o uso da classe Screen, uma filha abstrata da classe Displayable, usada para manipular elementos de alto-nível. Nela fazemos tudo de forma bem organizada no display. Não se pode, com ela, fazer desenhos à mão livre no display. A classe screen, por vez, têm mais filhas, sendo elas: • TextBox; • List; • Alert; • Form. Iremos ver agora, cada um dessas classes, junto com exemplos, que devem ser feitos compilados e rodados. 5.1.1 TextBox O TextBox é bastante simples. Ele permite que o usuário entre ou edite algum texto. Isso pode ser útil quando se precisar, em um programa, entrar com alguns dados como nome, telefone, email, etc... Necessita de quatro parâmetros em sua criação, como mostrado a seguir: public TextBox(String title, String text, int maxSize, int constraints); sendo "constraints"constantes da classe TextField, usadas para restringir o domínio do texto. Vejamos as constraints: • TextField.ANY: Qualquer caractere pode ser inserido. • TextField.EMAILADDR: Entrada só pode ser um endereço de email. • TextField.NUMBER: Entrada só pode ser um número inteiro. • TextField.PASSWD: Caracteres digitados são substituídos por asteriscos. • TextField.PHONENUMBER: Entrada só pode ser um número de telefone. • TextField.URL: Entrada só pode ser uma URL. Vejamos agora um exemplo no qual colocaremos um texto editável e também um ticker (es- pécie de "letreiro"que fica no topo do midlet, "caminhando"), acompanhe os comentários: TextBoxMIDlet import javax . microedition . l c d u i . * ; import javax . microedition . midlet . MIDlet ; 39
  • 41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF public class TextBoxMIDlet extends MIDlet { 5 / / criando um objeto de TextBox protected TextBox textBox ; private Display display ; 10 / / Definindo a quantidade máx de caracteres no TextBox private static f i n a l int MAX_TEXT_SIZE = 800; / / metodo construtor do TextBox 15 public TextBoxMIDlet ( ) { / / s t r i n g e di ta vel String s t r = "Esta eh uma mensagem editavel." ; 20 / / Criando o TextBox com c o n s t r a i n t textBox = new TextBox ( "Exemplo com TextBox" , str , MAX_TEXT_SIZE, TextField .ANY) ; / / Criando uma Ticker Ticker t i c k e r = new Ticker ( "Isto eh um ticker. Indo da direita pra esquerda..." ) ; 25 textBox . setTicker ( t i c k e r ) ; display = Display . getDisplay ( this ) ; } 30 protected void startApp ( ) { / / carrega o TextBox como janela p r i n c i p a l display . setCurrent ( textBox ) ; 35 } protected void pauseApp ( ) { } 40 protected void destroyApp ( boolean unconditional ) { } } 5.1.2 List List é um tipo de lista de ítens no qual se seleciona (ou não) algum (ou vários) elemento (s). Sua forma é a seguinte: List (String title, int listType) , onde listType é o tipo da lista, podendo ser uma dentre três opções: Implicit, Exclusive Multiple Para se criar listas aonde os elementos são figuras, usa-se a seguinte construção: List(String title, int listType, String[] strElements, Image[] imgElements) 40
  • 42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Para isso, deve-se criar um array de imagens. Estudaremos o código seguinte: ListMIDlet import javax . microedition . l c d u i . * ; import javax . microedition . midlet . MIDlet ; public class L i s t M i d l e t extends MIDlet implements CommandListener { 5 / / criando um objeto da classe L i s t protected L i s t l i s t ; private Display display ; 10 / / Criando commands: private Command exitCommand ; / / pra s a i r do MIDlet private Command okCommand; / / pra selecionar 15 public L i s t M i d l e t ( ) { / / Criando os botões exitCommand = new Command( "Sair" , Command. EXIT , 1) ; okCommand = new Command( "Ok" , Command.OK, 1 ) ; 20 / / Criando o L i s t String [ ] elements = { "Elemento 1" ,"Elemento 2" , "Elemento 3" } ; / / definindo elementos de imagens nulos , pois nao as usaremos aqui Image [ ] elementsImages = { null , null , null } ; 25 / / este exemplo de l i s t a e uma l i s t a de multiplas escolhas l i s t = new L i s t ( "Isto e uma List" , L i s t . MULTIPLE, elements , elementsImages ) ; / / adicionando os eventos l i s t .addCommand( exitCommand ) ; 30 l i s t .addCommand(okCommand) ; l i s t . setCommandListener ( this ) ; display = Display . getDisplay ( this ) ; } 35 protected void startApp ( ) { / / carrega o L i s t como a janela atual . display . setCurrent ( l i s t ) ; } 40 protected void pauseApp ( ) { } protected void destroyApp ( boolean unconditional ) { 45 } / / Controlando os comandos do usuário public void commandAction (Command command, Displayable displayable ) { 50 / / botão na t e l a l i s t f o i apertado i f ( displayable == l i s t ) { 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF / / O botão apertado f o i exitCommand . i f (command == exitCommand ) { 55 / / definindo uma t e l a nula para s a i r Display . getDisplay ( this ) . setCurrent ( null ) ; destroyApp ( true ) ; / / n o t i f i c a a KVM que o MIDlet terminou . 60 notifyDestroyed ( ) ; } else i f (command == okCommand) { / /O botão apertado f o i o okCommand / / aqui deve se colocar um evento r e l a t i v o a opção escolhida na l i s t a } 65 } } } 5.1.3 Alert O Alert serve para, como o próprio nome diz, mostrar um alerta. Ele pode ser na forma de uma simples mensagem "ERRO!"como também na forma de uma figura. Eles aparecem na tela e depois somem depois de um tempo, ou após alguma confirmação ou ação (dependendo da implementação). Sua forma é a seguinte: Alert(String title, String alertText, Image alertImage, AlertType alertType) , colocando parâmetro alertImage como null, caso seja só textual. O parâmetro AlertType define o tipo do alerta. Sendo que cada um possui ícones e sons específicos (mas também podem ser mudados). Eles são: • Alarm • Error • Info • Warning • Confirmation Programa com um exemplo de Alert, aonde aparece uma mensagem de alerta ao se iniciar e depois muda para um Form.: AlertMIDlet import javax . microedition . l c d u i . * ; import javax . microedition . midlet . MIDlet ; public class A l e r t M i d l e t extends MIDlet implements CommandListener { 5 / / criando o objeto da classe A l e r t protected A l e r t a l e r t ; 42
  • 44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF / / objeto Form 10 private Form form ; private Display display ; private Command exitCommand ; public A l e r t M i d l e t ( ) { 15 exitCommand = new Command( "Sair" , Command. EXIT , 1) ; / / Criando o A l e r t do t i p o ERROR. a l e r t = new A l e r t ( "Exemplo com Alerta" ,"Isto e um alerta." , null , AlertType .ERROR) ; 20 / / Definindo o timeout do a l e r t (1 ,5 s ) . a l e r t . setTimeout (1500) ; / / Criando um formulário para s e r v i r de fundo para o exemplo form = new Form( "Exemplo com Alerta" ,new Item [ ] {new StringItem ( "Form" , "Isto e um Form" ) } ) ; 25 form .addCommand( exitCommand ) ; form . setCommandListener ( this ) ; display = Display . getDisplay ( this ) ; 30 } protected void startApp ( ) { / / Define o A l e r t como janela atual e depois mostra o form . display . setCurrent ( a l e r t , form ) ; 35 } protected void pauseApp [ [ egg ] ] { } 40 protected void destroyApp ( boolean unconditional ) { } / / Controlando os comandos do usuário public void commandAction (Command command, Displayable displayable ) { 45 i f ( displayable == form ) { i f (command == exitCommand ) { Display . getDisplay ( this ) . setCurrent ( null ) ; 50 destroyApp ( true ) ; notifyDestroyed ( ) ; } } 55 } } 5.1.4 Form O Form é um formulário que permite a composição de vários ítens nele próprio. Ele já foi mos- trado em segundo plano em outros exemplos (como no HelloWorld). Iremos apenas trabalhar em um exemplo em que se tem várias coisas (tipos de ítens) já vistas em um form só. Implementare- mos um form com: 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • textField > texto editável; • stringItem > uma string como item; • spacer > espaço em branco em um form; • imageItem > uma imagem como item (lembrando que a imagem deve estar no mesmo pacote); • gauge > item graduado (como o indicador de bateria do celular); • choiceGroup > uma lista de com opções de escolha; • dateField > campo com data (editável). FormMIDlet import javax . microedition . midlet . * ; import javax . microedition . l c d u i . * ; public class FormMidlet extends MIDlet implements CommandListener , ItemStateListener 5 { / / Nosso formulario private Form form ; / / Itens para serem colocados no formulario 10 private ChoiceGroup choiceGroup ; private DateField dateField ; private TextField t e x t F i e l d ; private StringItem stringItem ; private ImageItem imageItem ; 15 private Gauge gauge ; private Spacer spacer ; private Command exitCommand ; 20 public FormMidlet ( ) { try { exitCommand = new Command( "Sair" ,Command. EXIT , 1 ) ; 25 / / Criando nosso formulário form = new Form( "Exemplo com Form" ) ; / / Criando os ítens do nosso formulário 30 choiceGroup = new ChoiceGroup ( "ChoiceGroup" , ChoiceGroup . EXCLUSIVE,new String [ ] { "Opcao 1" , "Opcao 2" , "Opcao 3" } , new Image [ ] { null , null , null } ) ; dateField = new DateField ( "DateField" , DateField .DATE, null ) ; t e x t F i e l d = new TextField ( "TextField" ,"texto editavel" ,50 , TextField .ANY) ; stringItem = new StringItem ( "StringItem" , "texto nao editavel" , Item .BUTTON) ; imageItem = new ImageItem ( "ImageItem" ,Image . createImage ( "/ image.jpg" ) , ImageItem .LAYOUT_CENTER, "Isso e um ImageItem" ) ; / / a imagem deve estar no mesmo pacote 44
  • 46. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 35 gauge = new Gauge( "Gauge" , true ,10 ,0) ; spacer = new Spacer (80 ,50) ; / / Adicionando os ítens ao nosso formulário form . append ( t e x t F i e l d ) ; 40 form . append ( stringItem ) ; form . append ( spacer ) ; form . append ( imageItem ) ; form . append ( gauge ) ; form . append ( choiceGroup ) ; 45 form . append ( dateField ) ; form .addCommand( exitCommand ) ; form . setCommandListener ( this ) ; 50 / / indicando que classe i r a escutar por mudanças no estado dos ítens form . setItemStateListener ( this ) ; } catch ( Exception ex ) { ex . printStackTrace ( ) ; 55 } } public void startApp ( ) { 60 / / Setando o nosso form como o display atual Display . getDisplay ( this ) . setCurrent ( form ) ; } public void pauseApp ( ) { 65 } public void destroyApp ( boolean unconditional ) { } 70 public void commandAction (Command command, Displayable displayable ) { i f ( displayable == form ) { i f (command == exitCommand ) { Display . getDisplay ( this ) . setCurrent ( null ) ; 75 destroyApp ( true ) ; notifyDestroyed ( ) ; } } } 80 / / Metodo invocado pela KVM quando algum item do form muda de estado . public void itemStateChanged ( Item item ) { i f ( item == choiceGroup ) { / / t r a t a r mudança de estado 85 } else i f ( item == dateField ) { / / t r a t a r mudança de estado } else i f ( item == t e x t F i e l d ) { / / t r a t a r mudança de estado } else i f ( item == gauge ) { 90 / / t r a t a r mudança de estado } else i f ( item == imageItem ) { / / t r a t a r mudança de estado 45
  • 47. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF } else i f ( item == spacer ) { / / t r a t a r mudança de estado 95 } else i f ( item == stringItem ) { / / t r a t a r mudança de estado } } } 5.2 Interface de Baixo-Nível A inteface de baixo-nível é constituída pela classe Canvas, filha abstrata da classe Displaya- ble. Nela trabalhamos com a manipulação livre de todos os elementos que são mostrados na tela do celular. No Canvas, se usa a idéia de desenhos, ou seja, o que será mostrado na tela terá que ser "desenhado". Isso nos oferece recursos "ilimitados"em relação à apresentação gráfica para o usuário. Programas para dispositivos móveis, geralmente, usam a interface de baixo-nível, para que o programa fique de acordo com o gosto do programador ou da pessoa/empresa para quem está se desenvolvendo o programa. Os jogos são exemplos de programas que exploram amplamente os recursos da classe Canvas. Para se ter uma idéia do uso da classe Canvas e da sua associação à uma tela com dese- nhos, faremos um simples desenho na tela : uma espécie de túnel. Analisaremos o exemplo a seguir: Classe que extende Canvas import javax . microedition . l c d u i . * ; import javax . microedition . midlet . * ; public class TunelCanvas extends Canvas implements CommandListener { 5 private TunelMIDlet midlet ; / * * * constructor 10 * / public TunelCanvas ( TunelMIDlet midlet ) { this . midlet = midlet ; 15 try { setCommandListener ( this ) ; addCommand(new Command( "Sair" , Command. EXIT , 1) ) ; } catch ( Exception e ) { / / tratando excecao 20 e . printStackTrace ( ) ; } } / * * 25 * ####metodo paint ##### * e aqui que faz todos os desenhos * / 46
  • 48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF public void paint ( Graphics g ) { int largura = getWidth ( ) ; 30 int a l t u r a = getHeight ( ) ; / / muda a cor atual para preto ( valor em hexadecimal ) g . setColor (0X000000 ) ; / / preenche o fundo com a cor atual ( preto ) 35 g . f i l l R e c t (0 ,0 , largura , a l t u r a ) ; / * * Aqui desenharemos um túnel . * ele é f e i t o com uma sucessao de desenhos simples ( c í r c u l o ) * / 40 int raio = 70; int i =0; int hex=0x000300 ; int cor=0x001000 ; / * * loop que dará a impressão de profundidade 45 * sendo printados vários cí rc u l o s de raiso diferentes *e com a origem modificada a cada interação * / for ( i =0; i <=100; i ++) { cor = cor + hex ; 50 g . setColor ( cor ) ; / / função para se desenhar um c í r c u l o g . drawArc ( a l t u r a /2 − raio−i +30, largura /2 +50 − raio−i , raio− i , raio−i , 0 , 360) ; } cor=0x001000 ; 55 for ( i =0; i <=70; i ++) { cor = cor + hex ; g . setColor ( cor ) ; g . drawArc ( a l t u r a /2 − raio−i +30, largura /2 +50 − raio−i , raio + i , raio +i , 0 , 360) ; } 60 } public void commandAction (Command command, Displayable displayable ) { midlet . destroyApp ( true ) ; midlet . notifyDestroyed ( ) ; 65 } } Classe Principal import javax . microedition . midlet . * ; import javax . microedition . l c d u i . * ; 5 public class TunelMIDlet extends MIDlet { private TunelCanvas lineCanvas ; public TunelMIDlet ( ) { 10 lineCanvas = new TunelCanvas ( this ) ; } public void startApp ( ) { Display . getDisplay ( this ) . setCurrent ( lineCanvas ) ; 47
  • 49. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 15 } public void pauseApp ( ) { } 20 public void destroyApp ( boolean unconditional ) { } } Crie as classes ( TunelCanvas.java e TunelMIDlet.java ) com o conteúdo acima, compile e execute para ver o resultado. Nesse exemplo esse "efeito 3D"se deu apenas à uma sucessão de círculos simples e mu- dança de cores que no final deu um efeito de profundidade. Porém existe uma API para constru- ção de gráficos 3D, o que oferece amplos recursos no quesito de interface gráfica (muito usado em jogos). 48