English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
J2ME de desarrollo de software para teléfonos celulares
(2002)
Colin Fahey
moto_t720_open_lightanddark02.jpg
Motorola T720 teléfono celular, se muestra abierto

1. Advertencia

Este documento está obsoleto!  La información contenida en este documento podría haber sido válido y útil en el año 2002, pero muchas cosas han cambiado en años posteriores!  Este documento sólo debe ser considerado como un interesante registro histórico del año 2002.  No confiar en cualquier información o asesoramiento en este documento.  Toda la información técnica en este documento es muy obsoleta. 

Descarga de la libre creación de software, auto-creado imágenes, y auto-creado teléfono melodías de alerta (es decir, “tonos de llamada),” es relativamente raro y difícil en el año 2002.  Lamentablemente, seis años más tarde, algunos teléfonos celulares los proveedores de servicios (incluidos los Apple, que proporciona el software exclusivo y “tono de timbre” para el portal iPhone) sigue imponiendo restricciones a la descarga de software, imágenes y música, teléfono celular, porque los proveedores de servicios gozan de gran beneficios financieros mediante el control de este tipo de descargas. 

Afortunadamente, los teléfonos celulares, tales como aquellos en los que participa la “Android” plataforma de software, siempre poner fin a la capacidad de las empresas para crear y explotar los mercados cerrados para esos usos de los teléfonos celulares.  Aunque los consumidores voluntariamente adquiridos teléfono celular que los planes de servicio incluyen costes muy elevados para la descarga de software, imágenes y música, esto se debe a que el limitado número de teléfono celular opciones de servicio disponibles. 

La dinámica económica que han permitido a algunas empresas a crecer a dominar el mercado no debe interpretarse como una aprobación implícita fuerte por los consumidores.  A medida que las empresas empiezan a dominar y, a continuación, hacen difícil o imposible para los competidores entrar en el mercado, las empresas dominantes pueden ofrecer productos que combinan un elevado valor positivo (por ejemplo, la capacidad de comunicarse desde cualquier lugar) con un alto valor negativo (por ejemplo, los altos precios conveniente para software, imágenes y música, todos los que de otro modo serían de libre acceso, por lo tanto, el servicio agrega valor negativo).  Ningún consumidor se ve obligado a comprar un teléfono celular, pero no hay duda de que la dominante de teléfonos celulares los proveedores de servicios han ido creado las condiciones que no se puede considerar un “mercado libre.”  Por lo tanto, el servicio de telefonía celular del mercado ha sido “económicamente” ineficiente y ha sido una carga indebida sobre los consumidores. 

Ojalá, los requisitos que el servicio de teléfono celular radiofrecuencias a disposición de la competencia los servicios de restablecer los valores normales de mercado para la transferencia de datos, por ejemplo, teléfono celular que los proveedores de servicios están nuevamente reducidos a meros portadores de datos (es decir, sólo ofrecer el ancho de banda), en lugar de información o proveedores de entretenimiento ! 

El negocio de transporte de datos deben ser separados de la actividad de venta de datos, de lo contrario, habrá un incentivo para el transporte de datos de empresas a bloquear los competidores de la venta de datos a través del mismo canal de transporte de datos. 

El video juego de consola del mercado sufre del mismo problema.  Los fabricantes de la consola de videojuegos de hardware están en el negocio de la creación de dispositivos que puede mostrar video juegos, pero esas mismas empresas también tienen el control exclusivo de la transferencia de software a las consolas de videojuegos.  Por lo tanto, es un incentivo para la consola de vídeo juego a los fabricantes a los competidores de bloquear la venta de software para la consolas de videojuegos.  Si una consola de videojuegos fabricante de hardware se centró en el diseño y la fabricación de hardware que podrían ser vendidas a un beneficio (en lugar de en una pérdida significativa, al igual que con la X-Box y PlayStation y Nintendo consolas de videojuegos) y, a continuación, el video juego del mercado que prospere, y la calidad de los mejores juegos de video que mejorar de manera espectacular, y el costo de videojuegos se derrumbaría. 

2. Tema índice

(1)
J2ME herramientas de desarrollo
(2)
Simple J2ME programa
(3)
Complejo programa J2ME
(4)
Sun “herramientas inalámbricas”
(5)
Oferta de software en un sitio de Internet
(6)
Descarga de software desde un sitio de Internet
(7)
Descargar los mensajes de error y mensajes de error de instalación
(8)
Creación, la oferta, y la descarga de “tonos de llamada”
(9)
Creación, la oferta, y la descarga de imágenes
(10)
AT&T teléfono celular configuración (para la red)
(11)
Enlaces a otros recursos teléfono celular
(12)
J2ME versus BREW

3. J2ME herramientas de desarrollo

En esta sección se describe cómo descargar las herramientas de desarrollo que pueden ser utilizados para compilar el código fuente J2ME en archivos de clase adecuado para dispositivos móviles.  Tenga en cuenta que el Sun “J2ME Wireless Toolkit,” que se examina en una sección posterior de este artículo, requiere la descarga de la Java SDK se describe en esta sección. 

3.1 JDK 1.4 (o posterior)

Esto significa que necesitas convencional Java 2 SDK de Sun.  He descargado y utilizado a través de la versión 1.4 el siguiente enlace:
http://java.sun.com/j2se/1.4/download.html
Esto es lo que la página de descarga tiene el siguiente aspecto:
java2sdk_download_page.jpg
Inicie el programa de instalación.  Instalar en la ubicación predeterminada ( c:\j2sdk1.4.0_03 ) a menos que sean capaces de resolver vía los problemas que puedan surgir. 

3.2 Connected Limited Device Configuration (CLDC)

No voy a pretender saber de qué se trata esto, pero yo simplemente descargado desde el sitio web Sun.
http://wwws.sun.com/software/communitysource/j2me/cldc/download.html
Aquí es lo que el principal CLDC descargar la página web tiene el siguiente aspecto:
cldc_download_page.jpg
1.0.3 sólo estaba disponible en el momento que visité.
Con el fin de descargar este, que necesitaba para inscribirse en Sun sitio web.  He creado el siguiente perfil:
Username:        anon***anon
Password:        nospamplease
Favorite color:  blue
Full name:       Prof. Anon Nospamplease
He descargado el archivo siguiente:
j2me_cldc-1_0_3-fcs-src-b17-winunix-14_sep_2001.zip
I descomprimido a la siguiente directorio:
C:\j2me
Me cambió el nombre del directorio “cldc-1_0_3-fcs” simplemente:
cldc (es decir, la ruta completa es c:\j2me\cldc)

3.3 Mobile Information Device Profile (MIDP)

No voy a pretender saber lo que esto sea, pero yo simplemente descargado desde el sitio web Sun.
http://java.sun.com/products/midp/
Esto es lo que MIDP la principal página web de descarga tiene el siguiente aspecto:
midp_download_page.jpg
He descargado el archivo siguiente:
j2me_midp-1_0_3-fcs-src-b26-win-19_sep_2001.zip
I descomprimido a la siguiente directorio:
C:\j2me
Me cambió el nombre del directorio “midp-1_0_3-fcs” simplemente:
midp (es decir, la ruta completa es c:\j2me\midp)

3.4 Configuración de herramientas

3.4.1 Establecer rutas

Añada las siguientes líneas a su AUTOEXEC.BAT archivo:
REM ---- Java Support ----
SET MIDP_HOME=C:\j2me\midp
SET PATH=%PATH%;c:\j2sdk1.4.0_03\BIN;
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\j2sdk1.4.0_03\BIN;C:\j2me\midp\bin;%PATH%
A continuación, la fuerza de estas variables para la recarga mediante la ejecución del archivo por lotes:
cmd_prompt_autoexec_bat.jpg
c:\>  autoexec.bat
También puede configurar estas mismas variables usando la variable de entorno Windows panel de control.

Observe que he elegido para especificar explícitamente el directorio caminos a mi versión actual de la Java 2 SDK.  Por lo tanto, si actualizo, entonces tengo que modificar el archivo AUTOEXEC.BAT para especificar los nuevos directorios. 

3.4.2 Compruebe la Jave 2 SDK binarios

Una vez que los ajustes se aplicarán, usted debería ser capaz de ejecutar la herramienta Java programas desde la línea de comandos sin especificar la ruta completa a los programas de la herramienta. 

El siguiente comando se iniciará el teléfono celular emulador de dispositivo: 
cmd_prompt_midp.jpg
c:\>  midp
La siguiente imagen muestra el teléfono celular emulador de dispositivo: 
java_midp_launch.jpg

4. Simple J2ME programa

4.1 Escriba el código Java

Utilizando cualquier editor de texto, una persona puede escribir en el código, como por ejemplo para este HelloMIDlet.java archivo de código fuente:
file_image_hellomidlet_java.jpg
Aquí está el código en texto sin formato:
// File: HelloMIDlet.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class  HelloMIDlet
extends       MIDlet
implements    CommandListener
{
    private Command exitCommand;
    private Display display;
    private TextBox t = null;

    public HelloMIDlet()
    {
        display = Display.getDisplay( this );
        exitCommand = new Command( "Exit", Command.EXIT, 2 );
        t = new TextBox
        (
            "Hello MIDlet",
            "Test string",
            256, 0
        );
        t.addCommand( exitCommand );
        t.setCommandListener( this );
    }

    public void startApp()
    {
        display.setCurrent( t );
    }

    public void pauseApp()
    {
    }

    public void destroyApp( boolean unconditional )
    {
    }

    public void commandAction( Command c, Displayable s )
    {
        if (c == exitCommand)
        {
            destroyApp( false );
            notifyDestroyed();
        }
    }
}

4.2 *.java compilar código para *.class

cd  c:\HelloMIDlet
Precaución: El siguiente comando debe estar en una sola línea, pero se ha ampliado a varias líneas de texto sólo en aras de la claridad.
(Directorio actual: C:\HelloMIDlet)
javac
    -target 1.1
    -d .\
    -bootclasspath c:\j2me\midp\classes
    HelloMIDlet.java
cmd_prompt_javac.jpg
Nota: El “-target 1.1” es necesaria para evitar un error en el futuro “preverify” etapa.  Al parecer, este tiene algo que ver con un problema con MIDP 1.0.3 apoyo en JDK 1.4. 

4.3 Preverify para generar un nuevo archivo *.class

cmd_prompt_preverify.jpg
(Directorio actual: C:\HelloMIDlet)
preverify  -classpath  c:\j2me\midp\classes;.  HelloMIDlet
Esto genera un nuevo archivo en *.class un nuevo subdirectorio llamado “output” (por defecto).

4.4 Prueba el nuevo archivo *.class

cmd_prompt_midp_midlet.jpg
(Directorio actual: C:\HelloMIDlet)
midp  -classpath  c:\j2me\midp\classes;.\output  HelloMIDlet
Así se inicia el emulador de teléfono, lo que indica que el nuevo “output” directorio contiene algunos de los archivos necesarios *.class.
La siguiente imagen muestra el resultado esperado.
java_midp_hellomidlet.jpg

4.5 Crear un nuevo archivo de texto, “manifest.mf”, y editar el archivo

A “manifest.mf” archivo es esencial para obtener un teléfono celular real para interpretar el contenido de un archivo *.jar.  Si un archivo “manifest.mf” no está incluido dentro de la *.jar archivo y, a continuación, el teléfono celular puede descargar con éxito la *.jar archivo, pero podría dejar de interpretar el archivo descargado, posiblemente un error de información, tales como “Unsupported Content Type”. 
El siguiente es un ejemplo de un simple archivo “manifest.mf”.
file_image_manifest_mf.jpg
Aquí está la “manifest.mf” archivo como texto sin formato: 
MIDlet-1: My_Description,, HelloMIDlet
MIDlet-Name: My_Midlet_Suite
MIDlet-Vendor: Colin Fahey, Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
Observe que el CLDC y MIDP versiones se especifican en este archivo.  Ser muy prudente y conservador cuando la redacción de los diferentes campos en este archivo.  Si usted recibe “File Corrupt” errores y, a continuación, intenta eliminar todos los campos que no se muestran en este ejemplo.  También, poner los campos en el orden en que aparecen en el ejemplo.  Asimismo, reducir el valor de cada campo tanto como pueda, y mantener los caracteres limitado a simples letras, dígitos, los períodos, y guiones.  Algunos servicios de telefonía celular y teléfonos celulares, pueden tolerar más la variación del campo de pedidos y contenido de los campos. 
Precaución: 

“jar” Cuando el programa se utiliza para crear un archivo *.jar, “manifest.mf” y el archivo se especifica como el manifiesto de archivo, el programa “jar” reza el manifiesto de archivo y podría añadir más campos, ya que crea un archivo llamado “MANIFEST.MF” dentro de la producción *.jar archivo.  Por lo tanto, si la “MANIFEST.MF” archivo se extrae de una *.jar archivo y, a continuación, se compara con el original “manifest.mf” archivo especificado durante la creación de la *.jar, los dos archivos puede ser diferente, con la “MANIFEST.MF” archivo que contiene varios campos que el archivo original “manifest.mf” . 

No “MANIFEST.MF” extracto de un archivo desde un archivo y *.jar intento de formar un nuevo *.jar archivo con el archivo que se manifiestan.  Si “MANIFEST.MF” extracto de un archivo desde un *.jar archivo y, a continuación, asegúrese de eliminar todos los campos excepto los que se muestra en el ejemplo “manifest.mf” archivo se muestra arriba. 
Nota:

Iconos para programas aparentemente no aparecen en el Motorola T720 teléfono.  Esta es la razón por la que no puedo describir mis MIDlet con un icono.  Sin embargo, la siguiente muestra cómo configurar un icono para el programa en el manifiesto de archivo: 

MIDlet-1: My_Description, /icon.png, HelloMIDlet 

En el desarrollo de los teléfonos celulares que hacer para mostrar iconos de aplicaciones, especifique el icono de nombre de archivo, y agregar el icono de archivo de imagen a sí mismo en la *.jar archivo especificando el nombre del archivo entre los nombres de archivo de los expedientes que se añade a la *.jar archivo. 

4.6 Ponga el archivo “manifest.mf” y *.class archivo en un archivo *.jar

El siguiente comando crea un archivo *.jar.  *.jar El archivo contiene el archivo especificado manifest.mf, y contendrá la *.class archivos encontrados en el directorio especificado.
cmd_prompt_jar.jpg
Directorio actual: C:\HelloMIDlet
jar  cfm  hi.jar  manifest.mf  -C .\output  HelloMIDlet.class
Complejo ejemplo hipotético de la creación de un archivo *.jar
Supongamos que un icono de archivo de imagen (por ejemplo, “icon.png”) es que aparezca en un archivo *.jar como “/icon.png”.  (Nota: Programa de iconos no aparecen en el Motorola T720 teléfono celular, pero no aparecen en otros tipos de teléfonos celulares, y aparecen en el MIDP emulador). 

Supongamos que hay un directorio llamado “images” con archivos de imagen (formato *.png).  Supongamos que este directorio, y todas las imágenes contenidas en el directorio, debe ser accesible a la Java programa por la relativa /images directorio (por ejemplo una imagen que “a.png” sería accesible utilizando la ruta de acceso “/images/a.png”). 

Supongamos que todos los archivos *.class producido por el comando preverify están contenidas en un directorio llamado “verified”.  Por ejemplo, verificar la versión de la clase principal, “MyApp.class”, se “verified” en la carpeta, junto con las otras clases del programa.  Todas estas clases son para ser accesible en el directorio raíz de la *.jar archivo. 

El siguiente comando creará un archivo *.jar que logre los diversos objetivos especificados en los apartados anteriores.  Precaución: el comando se ha ampliado a varias líneas de texto sólo aquí en aras de la claridad.  Al entrar en el comando en el símbolo del sistema, el comando no debe contener saltos de línea, de lo contrario el intérprete de comandos interpretará el texto introducido como varios comandos independientes. 

jar
    cfmv             [Create JAR, Specify JAR Name, Add manifest.mf, Verbose]
    MyApp.jar        [Name of output JAR file]
    manifest.mf      [The manifest.mf file]
    icon.png         [Optional icon, specified by JAD as "/icon.png"]
    images           [Directory to add to JAR as "/images"]
    -C .\verified .
La parte final del mando es difícil de entender.  Se tiene el siguiente significado:  “Cambie el directorio de trabajo actual a .\verified y, a continuación, poner *.class todos los archivos encontrados en el directorio '.' relativa (es decir, todos los *.class archivos en el directorio de trabajo actual) en el archivo *.jar.”  Debido a que el directorio se había cambiado antes de especificar la ruta de acceso de las clases para poner en el *.jar archivo, la ruta de acceso local no aparecerán en la ruta de acceso relativa cuando los archivos se colocan en el archivo *.jar. 

Por ejemplo, supongamos que la verificación de las clases son en el siguiente directorio: 

C:\MyApp\verified 

Supongamos que hay archivos de clase como las siguientes: 

C:\MyApp\verified\w.class 

A continuación, especificando “-C .\verified .”  en el comando para crear el archivo *.jar, a partir de un directorio actual de “C:\MyApp”, se traducirá en “w.class” están en el directorio raíz de la *.jar archivo.  </ e>

Advertencia: Si el “-C” opción se especifica, cambia el directorio de trabajo actual en ese momento de la transformación global de la secuencia de comando parámetros para el comando jar.  Por lo tanto, el comando podría jar se quejan de que no puede encontrar otros archivos mencionados en el mando más allá de los parámetros “-C” opción.  Si esto ocurre, basta con mover el “-C .\verified .”  a ser el final de los parámetros de comando general. 

A continuación se muestra salida verbosa de la jar comando. 
added manifest
adding: icon.png(in = 449) (out= 454)(deflated -1%)
adding: images/(in = 0) (out= 0)(stored 0%)
adding: images/a.png(in = 2463) (out= 2223)(deflated 9%)
adding: images/b.png(in = 1322) (out= 579)(deflated 56%)
adding: images/c.png(in = 3433) (out= 2874)(deflated 16%)
adding: images/d.png(in = 1524) (out= 801)(deflated 47%)
adding: w.class(in = 2570) (out= 1356)(deflated 47%)
adding: MyApplication.class(in = 4714) (out= 2169)(deflated 53%)
adding: x.class(in = 3239) (out= 1429)(deflated 55%)
adding: y.class(in = 14205) (out= 6481)(deflated 54%)
adding: z.class(in = 9448) (out= 5135)(deflated 45%)

4.7 Crear y editar un nuevo archivo *.jad

A *.jad archivo es necesario para que el teléfono celular puede describir un programa de ordenador a una persona antes de que la persona decide a descargar el programa.  *.jad El archivo también ofrece algunos indirección de la *.jar sí mismo. 
file_image_hi_jad.jpg
Un ejemplo *.jad archivo, que describe un archivo *.jar
Aquí está el ejemplo hi.jad archivo en texto sin formato:
MIDlet-1: My_Description,, HelloMIDlet
MIDlet-Jar-Size: 1283
MIDlet-Jar-URL: http://www.colinfahey.com/hi.jar
MIDlet-Name: My_Midlet_Suite
MIDlet-Vendor: Colin Fahey, Inc.
MIDlet-Version: 1.0
Hay programas que pueden generar el archivo *.jad, que le hace más fácil para actualizar el campo “MIDlet-Jar-Size:” cada vez que el archivo se *.jar cambiado (y sus cambios de tamaño).  Si usted busca el Internet usted encontrará útil J2ME programas. 

Si el tamaño del campo no se especifica el total de bytes exacto de la *.jar el archivo y, a continuación, el siguiente mensaje de error puede aparecer después de una exitosa descarga en un teléfono celular: “Download Failed” (no descargar). 

Para el Motorola T720 teléfono celular, el siguiente mensaje de error podría ser utilizado para inidcate campos no válidos en el archivo *.jad, o posiblemente no válidos en los campos generados MANIFEST.MF archivo en el archivo *.jar: “Failed: File Corrupt” (no: archivo corrupto). 
Nota: Si el *.jar archivo se encuentra en el mismo directorio que el archivo correspondiente *.jad Internet en un servidor web y, a continuación, el *.jad archivo puede simplemente indicar el nombre del archivo de la *.jar archivo, sin especificar un pleno URL, como en el ejemplo siguiente: 

MIDlet-Jar-URL: hi.jar 

Al descargar estos archivos desde Internet Apache un servidor web a un Motorola T720 teléfono celular, es aceptable para no incluir la plena URL.  Sin embargo, cuando la descarga de estos archivos de Internet Yahoo!  un servidor web a un Motorola T720 teléfono celular, el intento de descarga no, a menos que una plena URL camino a la *.jar archivo se especifica en el archivo *.jad, como en el ejemplo siguiente: 

MIDlet-Jar-URL: http://www.colinfahey.com/hi.jar 

No sé la razón de este problema, y sé que este problema no afecta a otros teléfonos celulares (teléfono celular o proveedores de servicios).  El hecho de tener que especificar el pleno la URL para *.jar archivo en el archivo *.jad es obviamente inconveniente, porque los archivos se desplazan a diferentes lugares en un servidor sería necesario cambiar la información en todos los *.jad archivos.  Sin embargo, especificando el pleno URL podría hacer que la *.jad más fiables para ciertos teléfonos celulares y algunos teléfonos celulares proveedores de servicios. 

4.8 Probar el *.jar archivo y el archivo de *.jad ejecutando el programa

El siguiente ejecuta la clase se encuentra en el archivo *.jar, el descritos por *.jad archivo. 
cmd_prompt_midp_jar_jad.jpg
(Directorio actual: C:\HelloMIDlet)
midp  -classpath c:\j2me\midp\classes;.\hi.jar  -descriptor hi.jad

4.9 Referencias para J2ME, MIDP, CLDC desarrollo

Gran parte de lo que se presenta aquí se puede encontrar en muchos otros sitios de Internet.  Sin embargo, corregido algunos errores encontrados en otros sitios de Internet, y añadió que faltan detalles, y presentó la experiencia completa de alguien tratando de hacer estas cosas.  Aquí son muy informativos vínculos que me ayudó a empezar: 
http://wireless.java.sun.com/midp/articles/getstart
http://wireless.java.sun.com/midp/articles/setup

5. Complejo programa J2ME

5.1 Introducción

El sencillo programa presentado en la sección anterior de este documento sólo tiene un único archivo de código fuente, y el programa hace casi nada y, por tanto, no es un buen ejemplo de teléfono celular de programación. 

Mi amigo Sam Robertson escribió J2ME un interesante programa que enseña a una persona para desempeñar el juego de cartas “Blackjack” (también llamado “21”).  Un jugador se presenta con un “distribuidor de tarjetas,” y el jugador del par de tarjetas, y el jugador debe decidir qué hacer: “la estancia, hit,” doble “hacia abajo, o” se separan. 

Este programa tiene seis archivos de código fuente.  El programa responde a la entrada del usuario, y no simple dibujo y actualizaciones de texto. 
sbj_screen_on_phone.jpg

5.2 Código fuente

Haga clic en el siguiente enlace para obtener el código fuente, y el archivo de *.jad, “manifest.mf” archivo y un archivo por lotes, todos en un archivo conveniente ZIP.
sbj.zip
El código fuente que figuran en un archivo ZIP
6090 bytes
MD5: bf3922035b7a4eef24e107d03b7524c9
Extracto de un directorio arbitrario, pero si el extracto de “c:\” bajo Windows, el ejemplo siguiente debate será aún más cerca de su situación real.
sbj_directory_files.jpg
Extraer sbj.zip a “c:\” crea el directorio “c:\sbj”

5.3 Manifiesto de archivo

Expediente: “manifest.mf”:
MIDlet-1: My_Description,, SBJ_MidletT
MIDlet-Name: SBJ_MidletT
MIDlet-Vendor: Sam Robertson
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0

5.4 El archivo por lotes para construir el programa

El siguiente archivo por lotes es bruto, pero sirve como un ejemplo de cómo puede empezar a escribir su propio archivo por lotes para construir su J2ME programa.  Este archivo por lotes ejemplo hace lo siguiente:
(1) Eliminar el directorio que contiene los archivos *.class de edad; 
(2) Eliminar el directorio que contiene la antigua verificado *.class archivos; 
(3) Hacer un directorio de salida de “clases;” 
(4) Recopilar todas las fuentes en *.java a *.class archivos, con salida a “las” clases directorio. 
(5) Hacer un directorio de salida “verificado;” 
(6) Preverify todas las clases “en” las clases de directorio, y poner el verificado las clases “verificadas” en el directorio. 
(7) Crear un archivo *.jar, y añadir la mainfest archivo y, a todas las clases “verificadas” en el directorio; 
*(8) los ensayos del programa a través de la preverified clases directamente; 
*(9) los ensayos del programa a través de la *.jar y *.jad archivos; 

(*...  Estos pasos son los discapacitados (por comentar) en mi archivo por lotes). 
sbj_build_sbj_bat_file.jpg
El archivo por lotes para la construcción de “build_sbj.bat” el programa
Aquí está el mismo archivo (“build_sbj.bat”) en texto sin formato:
rmdir /S /Q classes
rmdir /S /Q verified
del /F /Q  *.jar

mkdir classes

javac  -g:none  -target 1.1  -d .\classes  -bootclasspath c:\j2me\midp\classes  *.java

mkdir verified

preverify  -classpath c:\j2me\midp\classes;.\classes  -d .\verified  .\classes

jar  cvfm sbj. jar manifest.mf  -C  .\verified  .

REM  midp  -classpath c:\j2me\midp\classes;.\verified  SBJ_MidletT
REM  midp  -classpath c:\j2me\midp\classes;.\sbj.jar  -descriptor sbj.jad
REM  Finished

5.5 Construir desde la línea de comandos

Este es el resultado de ejecutar el archivo por lotes “build_sbj.bat” en la línea de comandos:
sbj_build_command_prompt.jpg
La ejecución del archivo por lotes “build_sbj.bat”
Tenga en cuenta que los mensajes de advertencia para el “rmdir” y “del” operaciones se limitan a indicar que no hay nada que quitar. 

Usted puede ver los nuevos directorios (es decir, “classes” y “verified”) y el nuevo archivo *.jar que el resultado de ejecutar el archivo por lotes:
sbj_new_files_after_build.jpg
Archivos de código fuente y nuevo archivo generado

5.6 *.jad archivo

Para implementar la sbj.jar archivo, tenemos que crear y editar el archivo sbj.jad tener el tamaño correcto *.jar en el campo correspondiente:
Expediente: sbj.jad
MIDlet-1: SBJ_MidletT, , SBJ_MidletT
MIDlet-Jar-Size: 7257
MIDlet-Jar-URL: sbj.jar
MIDlet-Name: Sam Blackjack Trainer
MIDlet-Vendor: Sam Robertson
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
Una persona puede ser que necesite añadir la completa URL a la *.jar archivo *.jad cuando el archivo se coloca en un sitio de Internet -, pero he descubierto (por un experimento) que yo era capaz de evitar mencionar la plena URL (es decir, sólo se especifica el *.jar nombre de archivo por sí mismo).  Sin embargo, la puesta en el URL completo, pero quería hacerle saber lo que he observado.

5.7 Resumen

Después de haber múltiples archivos de origen en su proyecto es común y, en esta sección nos dio una cruda ilustración de la construcción de varias clases, seguido por los envases y la ejecución. 

Por favor, consulte la sección siguiente con respecto a la utilización Sun Wireless Toolkit, lo que hace que la construcción de aplicaciones mucho más fácil. 

6. Sun “Wireless Toolkit (version 1.0.4_01)”

6.1 Introducción

Sun ofrece una cómoda entorno de desarrollo para la construcción y el embalaje J2ME programas: “Java 2 Platform Micro Edition (J2ME) Wireless Toolkit (version 1.0.4_01)”. 

(Precaución: Usted necesitará descargar los Java 2 SDK 1.4 tal como se describe en una sección anterior para utilizar este kit de herramientas.  Hacer esto ahora, si usted no tiene aún esta versión de la Java 2 SDK.) 

Ir a la siguiente sitio de Internet para descargar la guía: 

http://java.sun.com/products/j2mewtoolkit/ 
Precaución!
 

NO haga clic en el vínculo “2.0 Beta 1 English” (en la actualidad el principio opción de descarga), si están haciendo Motorola T720 desarrollo - porque esta versión tiene algunos MIDP-2.0 cosas, y conseguir alrededor de esto puede ser un dolor de cabeza. 
j2me_wireless_toolkit_2_0_download_page.jpg
No descargar esta versión!  (“2.0 Beta 1 English”)
He probado esta versión, y yo tengo el tiempo para compilar el código con una gran cantidad de cambios de configuración desordenado, pero después de todo el esfuerzo Tengo una excepción de seguridad cuando trató de ejecutar.  No molestar! 
Descargue la versión “1.0.4_01 English”.  Esto es lo que la página de descarga tiene el siguiente aspecto: 
j2me_wireless_toolkit_1_0_4_01_download_page.jpg
La página de descarga Sun J2ME Wireless Toolkit (version 1.0.4_01)
j2me_wireless_toolkit_1_0_4_01_download_page2.jpg
El Sun J2ME Wireless Toolkit (version 1.0.4_01) FTP lista de sitios
Esto descargará el archivo siguiente: “j2me_wireless_toolkit-1_0_4_01-bin-win.exe” 
Ejecutar este programa para instalar en su sistema.

6.2 J2ME Wireless Toolkit: lanzamiento de la barra de herramientas

Después de la guía está instalado, usted puede lanzar desde el “Start” (inicio) sistema de menú:
j2me_wireless_toolkit_1_0_4_ktoolbar.jpg
Inicio de la barra de herramientas de programa
También puede acceder a la documentación MIDP-1.0 a través de la “Documentation” en este tema Start (inicio) del menú.
j2me_wireless_toolkit_2_0_wtk20_docs_api_index_html.jpg
J2ME Wireless Toolkit (version 1.0.4_01) documentación

6.3 J2ME Wireless Toolkit: crear y construir proyecto

j2me_wireless_toolkit_1_4_ktoolbar_window.jpg
La barra de herramientas está listo.  Haz clic para “New Project...”  crear un nuevo proyecto.
j2me_wireless_toolkit_1_4_ktoolbar_new_project.jpg
New Project: Escriba el nombre del proyecto (se convierte en JAR nombre y el nombre del nuevo directorio de proyecto), y el tipo MIDlet en nombre de clase (clase derivados de MIDlet, esencialmente la clase principal de su aplicación). 
j2me_wireless_toolkit_1_4_ktoolbar_project_created.jpg
Barra de herramientas: proyecto creado.  Notificación de la consola que le indica dónde colocar su *.java archivos de código fuente, etc  (por ejemplo, “c:\WTK104\apps\sbj\src”, etc) 
j2me_wireless_toolkit_1_4_ktoolbar_project_settings.jpg
Haga clic en “Settings...”  en la barra de herramientas para obtener esta configuración de un proyecto de menú. 
“MIDlet-Jar-Size” caso omiso de la esfera (con valor de “100 bytes)” por ahora.  Vamos a la larga causa el valor correcto para obtener conjunto. 
j2me_wireless_toolkit_1_4_ktoolbar_project_midlet_settings.jpg
Haga clic en la ficha MIDlets de la configuración de un proyecto de diálogo.
Haga clic en la única fila de la tabla (“MIDlet-1”) para resaltar y seleccionar esa opción.  A continuación, haga clic en el botón “Edit”. 
j2me_wireless_toolkit_1_4_ktoolbar_project_no_icon.jpg
Borrar la “Icon” campo si no tiene un archivo *.png para poner en su *.jar archivo. 
Haga lo siguiente: 

(1) Project --> Clean: Elimina todos los archivos *.class;
(2) Build : Construye *.class todos los archivos y preverifies;
(3) Project --> Package --> Create Package : produce *.jar y *.jad
j2me_wireless_toolkit_1_4_ktoolbar_clean_build_create_package.jpg
El resultado de la construcción de la *.jar y *.jad
Cuando usted hace estas tres medidas, el resultado *.jar y *.jad son inmediatamente listos para su ejecución local en el emulador, o para el despliegue inmediato en su sitio en Internet para que otros puedan descargar “por el aire” (OTA).  El *.jar tamaño en el campo *.jad archivo será correcta.  No se olvide de hacer el paso (3) cada vez que reconstruir! 

Ahora puede probar por golpear a la “Run” (run) botón. 
j2me_wireless_toolkit_1_4_ktoolbar_project_launch.jpg
j2me_wireless_toolkit_1_4_ktoolbar_project_running.jpg
Golpear “Run” para el proyecto lee el *.jad en el emulador.  Usted puede seleccionar el MIDlet específicas para poner en marcha (normalmente sólo una). 
Sólo tienes que copiar el *.jar y *.jad archivos de la ubicación especificada (información aportada por la barra de herramientas de la ventana de la consola durante una de construir el proyecto), tales como:
(Desde la ventana de la consola:)
Wrote c:\WTK104\apps\sbj\bin\sbj.jar
Wrote c:\WTK104\apps\sbj\bin\sbj.jad
Coloque estos archivos directamente a su sitio de Internet sin modificaciones, y debería funcionar.  Esto es lo que he visto en mi teléfono celular después de la descarga de esta aplicación compilada “por el aire” (OTA)
sbj_screen_on_phone.jpg
Sam Robertson's Blackjack Trainer (sbj.jar) de ejecución en mi teléfono celular

7. Oferta de software en un sitio de Internet

7.1 Asegúrese de que el servidor web Internet MIME especifica *.jar tipos de archivos y archivos *.jad

Si usted tiene un Apache servidor web de Internet, usted necesita crear un archivo llamado “.htaccess” dentro de su sitio web directorio raíz.  El “.htaccess” archivo le permite anular Apache de configuración, tales como añadir o superior MIME tipos de archivo.  Usted debe agregar la MIME especificar los tipos correspondientes a *.jar archivos y *.jad archivos, como se muestra en el siguiente archivo de texto: 
htaccess_image.jpg
Mi costumbre “.htaccess” archivo de la Internet Apache servidor web.  Nota: este archivo llamado “.htaccess.txt” simplemente para hacer el archivo fácil de editar cuando se utiliza el sistema operativo Windows.  El nombre del archivo debe ser cambiado a “.htaccess” antes de que el archivo puede ser utilizado con el Internet Apache servidor web. 
Aquí está mi .htaccess simple archivo como texto sin formato:
AddType text/vnd.sun.j2me.app-descriptor jad
AddType application/java-archive jar
AddType text/vnd.wap.wml wml
Al parecer, la creación o modificación de este archivo se traduce en un cambio inmediato de Apache comportamiento del servidor.  Supongo que el servidor comprueba Apache la modificación de fecha y hora de la “.htaccess” archivo a cada nuevo transacción, y el servidor vuelve a cargar el archivo que si la modificación de la fecha y la hora ha cambiado. 

Si usted tiene un tipo diferente de servidor web de Internet, usted debe determinar cómo especificar MIME tipos, y debe asegurarse de que *.jar archivos y *.jad archivos se les asigna el MIME tipos. 

Usted sabrá si la MIME tipos no se han establecido si el teléfono celular se niega a descargar su *.jad archivo de informes y el siguiente error: 

“406: Not Acceptable” 

7.2 Opcionalmente proporcionar enlaces a la *.jad archivo en HTML o documentos WML

El Motorola T720 J2ME teléfono celular con AT&T servicio es capaz de descargar un archivo *.jad directamente, escribiendo la URL de la *.jad archivo en el teléfono celular.  Es probable que el trabajo de otros J2ME teléfonos celulares con otros teléfonos celulares proveedores de servicios. 

Sin embargo, podría ser más conveniente para las personas a descargar el archivo *.jad por la selección de un vínculo dentro de un HTML documento o dentro de un WML documento.  (Nota: WML actualmente se encuentra obsoleto.  Mayoría de los teléfonos celulares ahora pueden interpretar HTML.) 
file_image_hi_html.jpg
A simple HTML documento con un vínculo a un archivo *.jad
file_image_hi_wml.jpg
A simple WML (WAP) página con un enlace a un archivo *.jad  (Nota: WML actualmente se encuentra obsoleto.  Mayoría de los teléfonos celulares ahora pueden interpretar HTML.) 

8. Descarga de software desde un sitio de Internet

Las siguientes imágenes muestran la secuencia exacta de las acciones que hice para descargar y ejecutar el MIDlet desarrollado y desplegado tal y como se describe en las secciones precedentes anteriormente.  Estas imágenes son fotografías de la pantalla de mi teléfono celular. 
t720_screens_download_program.jpg
(1) Pantalla principal: Cuando se abre el teléfono, verá la pantalla principal.  Pulse el botón central para ir al menú principal. 
(2) Main Menu: Trasladar a la “WebAccess” el tema. 
(3) WebAccess: Trasladar a la “Go To URL” el tema. 
(4) Enter URL: Escriba en la URL de *.jad un fichero (o de un HTML documento, o de un documento WML). 
(5) Details; Esta información fue analizada a partir de la *.jad archivo.  DOWNLD Pulse para descargar el archivo *.jar. 
(6) Download Complete; Espere este mensaje a desaparecer; 
(7) Installing; Espere este mensaje a desaparecer; 
(8) xxxx bytes transferred; Espere este mensaje a desaparecer; 
(9) Installed; Espere este mensaje a desaparecer; 


WebAccess Cuando el menú aparece de nuevo, después de que el programa ha sido instalado, simplemente salir de cada menú para regresar a la pantalla principal. 
t720_screens_start_program.jpg
(1) Pantalla principal: Cuando se abre el teléfono, verá la pantalla principal.  Seleccione la opción “Games & Apps” a través del menú principal, o pulse el cursor hacia abajo en la pantalla principal. 
(2) Java Powered: Espere a que esta pantalla a desaparecer. 
(3) Games & Apps: Seleccione el elemento con el nombre de tu programa! 
(4) Yay!  El éxito de la ejecución de su programa! 
El programa aparición en el teléfono celular es muy similar a la aparición en el emulador.

9. Descargar los mensajes de error y mensajes de error de instalación

9.1 Motorola T720 (J2ME) mensajes de error

Los siguientes errores de los mensajes sólo son pertinentes a la Motorola T720 (GSM/J2ME) teléfono celular. 

9.1.1 “Download Failed”

Causa # 1
Cualquier archivo (HTML, JAD, JAR, MID, GIF) más 1644 bytes causa de este error para ciertas web de Internet hosts y servidores.  He aquí una breve lista de hosts y servidores: 
Host / Server                                               Error
===================================================    =================
Apache                                                       No
Microsoft Personal Web Server (direct from your PC)          No
Earthlink (Apache)                                           No
Yahoo! (custom server)                                       Yes
El problema se debe a un error en la Motorola T720 GSM/J2ME firmware, lo que provoca la descarga de archivos en fragmentos al fracaso.
La única solución aparente es para cambiar de Internet o Web hosts tipo de servidor.  Otros tipos de teléfonos celulares no tienen este problema. 
Causa # 2
El “MIDlet-Jar-Size:” ámbito de la *.jad un archivo no se indica el total exacto de byte de la correspondiente *.jar archivo.

9.1.2 “Failed: File Corrupt”

Causa # 1
El *.jar archivo utiliza API funciones que no están disponibles en los teléfonos celulares. 

Por ejemplo, MIDP 2.0 funciones no están disponibles en la Motorola T720 GSM/J2ME teléfono celular (que sólo tiene funciones MIDP 1.0).  Un programa puede ejecutar en un emulador, pero no podría ejecutar en el teléfono celular. 

La solución es buscar MIDP 2.0 funciones en el código fuente y reemplazarlos con MIDP 1.0 funciones, o eliminar las características que requieren la MIDP 2.0 funciones. 
Causa # 2
El “manifest.mf” archivo utilizado para crear el archivo *.jar (a través de la “jar” utilidad) contiene errores. 

Asegúrese de que el archivo ha “manifest.mf” las siguientes versiones de CLDC y MIDP: 
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
La totalidad de “manifest.mf” archivo debe mirar casi exactamente como los siguientes: 
MIDlet-1: My_Description,, HelloMIDlet
MIDlet-Name: My_Midlet_Suite
MIDlet-Vendor: Colin Fahey, Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
Cada línea de texto en el archivo “manifest.mf”, incluida la última línea del archivo, debe terminar con un “carraige regreso” (CR; 13; 0x0d) carácter seguido por un “avance de línea” (LF; 10; 0x0a) carácter. 

Los únicos campos de la “manifest.mf” archivo en su propia versión del archivo que debe ser diferente del ejemplo se muestra aquí son los primeros tres campos que figuran en el ejemplo.  El final tres ámbitos debe ser una coincidencia exacta con el ejemplo, y los dos últimos caracteres del archivo debe ser el “retorno de carro” y “avance de línea” después de la final de campo. 

Aquí están los posibles problemas en su versión de la “manifest.mf” archivo: 
(1) Su “manifest.mf” archivo contiene caracteres que no son caracteres ASCII; (Mira en una tabla de caracteres ASCII; cualquier carácter fuera de la 0 a 127 rango no es válido); 
(2) Su “manifest.mf” archivo no tiene un “avance de línea” (LF) carácter después de cada “retorno de carro” (CR) carácter al final de cada línea; 
(3) Su “manifest.mf” archivo invisible espacios o fichas al final de cada línea antes de la terminación (CR)(LF) línea; 
(4) Su “manifest.mf” archivo contiene una línea “Manifest-Version:”; 
(5) La última línea de su archivo “manifest.mf” no termina con un (CR)(LF) línea de terminación, sino que simplemente llega al final del archivo; 
(6) Su “manifest.mf” archivo no tiene exactamente los campos y orden exacto de los campos como se muestra en el ejemplo anterior; 
(7) Su CLDC versión no es exactamente 1.0, MIDP o su versión no es exactamente 1.0; 
(8) Su nombre de proveedor tiene caracteres que no son ASCII caracteres (por ejemplo, los caracteres Unicode no se permite); 
(9) Su “manifest.mf” archivo no tiene un espacio después de la segunda coma en el “MIDlet-1:” línea; 
Tal vez a