English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
J2ME ontwikkeling van software voor mobiele telefoons
(2002)
Colin Fahey
moto_t720_open_lightanddark02.jpg
Motorola T720 mobiele telefoon, afgebeeld geopend

1. Waarschuwing

Dit document is verouderd!  De informatie in dit document kunnen zijn geldig en nuttig in het jaar 2002, maar veel dingen zijn veranderd in de daaropvolgende jaren!  Dit document moet nu alleen worden beschouwd als een interessante historische record van het jaar 2002.  Reken er niet op enige informatie of advies in dit document.  Alle technische informatie in dit document is erg verouderd. 

Het downloaden zelf-gemaakte software, zelf gecreëerde beelden en self-created telefoon alert melodieën (dat wil „zeggen,“ beltonen), was relatief zeldzaam en moeilijk in het jaar 2002.  Helaas, zes jaar later, enkele aanbieders van mobiele telefoon (met inbegrip van Apple, die de exclusieve software en „beltoon“ portaal voor de iPhone) nog steeds beperkingen opleggen met betrekking tot het downloaden van software, afbeeldingen en muziek, omdat mobiele telefoon dienstverleners genoten zeer grote financiële winsten door het beheersen van deze soorten downloads. 

Gelukkig, cellulaire telefoons, zoals die met de „Android“ software platform, zal eeuwig einde het vermogen van de ondernemingen te creëren en te benutten gesloten markten voor dergelijke vormen van gebruik van cellulaire telefoons.  Hoewel de consument willens gekochte mobiele telefoon service van plannen die onder zeer hoge kosten voor het downloaden van software, afbeeldingen en muziek, dit is vanwege het beperkte aantal mobiele telefoon service-opties beschikbaar. 

De economische dynamiek die het mogelijk hebben gemaakt, bepaalde bedrijven uit te groeien tot een machtspositie op de markt mag niet worden uitgelegd als een impliciete goedkeuring door de sterke consumenten.  Zoals bedrijven beginnen te domineren, en dan maakt het moeilijk of onmogelijk voor concurrenten om de markt te betreden, de dominante bedrijven kunnen producten aanbieden die een combinatie van hoge positieve waarde (bijvoorbeeld de mogelijkheid om te communiceren, van waar dan ook) met een hoge negatieve waarde (bijvoorbeeld hoge prijzen wenselijk voor software, afbeeldingen en muziek, die allemaal anders zou zijn vrij beschikbaar, dus de service voegt negatieve waarde).  Geen consument wordt gedwongen tot aankoop van een mobiele telefoon, maar er is geen twijfel over bestaan dat de dominante gsm dienstverleners hebben geleidelijk voorwaarden geschapen die niet kunnen worden beschouwd als een „vrije markt.“  Daarom wordt de mobiele telefoon service markt is „economisch“ inefficiënt en is een onnodige last voor de consument. 

Hopelijk, eisen dat de mobiele telefoon dienst radiofrequenties beschikbaar zijn om concurrerende diensten op het herstel van de normale marktwaarde aan de overdracht van gegevens, zodat mobiele telefoon dienstverleners zijn weer teruggebracht tot louter dragers van gegevens (bijvoorbeeld alleen het verstrekken van bandbreedte) in plaats van informatie of entertainment aanbieders ! 

De activiteiten van het transport van data moet worden gescheiden van de werkzaamheden van de verkoop van gegevens, anders zal er een stimulans voor de business data transport te blokkeren concurrenten uit de verkoop van gegevens via dezelfde data transport kanaal. 

De video game console markt kampt met hetzelfde probleem.  De fabrikanten van video game console hardware zijn bezig met het oprichten van apparaten die kunnen worden weergegeven, video games, maar die dezelfde bedrijven die ook de exclusieve controle van de overdracht van software aan die video game consoles.  Daarom is er een stimulans voor de video game console fabrikanten te blokkeren concurrenten uit de verkoop van software voor de video game consoles.  Als een video game console hardware fabrikant gericht op het ontwerpen en produceren van hardware die konden worden verkocht tegen een winst (in plaats van op een aanzienlijk verlies, net als met de X-Box en PlayStation en Nintendo video game consoles), dan wordt de video game markt zou gedijen, en de kwaliteit van de beste videogames zou drastisch verbeteren en de kosten van videospelletjes zou instorten. 

2. Topic index

(1)
J2ME ontwikkeltools
(2)
Simple J2ME programma
(3)
Complexe programma J2ME
(4)
Sun „draadloze toolkit“
(5)
Het aanbieden van software op een internet site
(6)
Het downloaden van software vanaf een internetsite
(7)
Download foutmeldingen en de installatie foutberichten
(8)
Het maken, aanbieden, en het downloaden van „beltonen“
(9)
Het maken, aanbieden, en het downloaden van afbeeldingen
(10)
AT&T mobiele telefoon configuratie-instellingen (voor het netwerk)
(11)
Links naar andere mobiele telefoon middelen
(12)
J2ME versus BREW

3. J2ME ontwikkeltools

Deze paragraaf beschrijft hoe ontwikkel-tools te downloaden die gebruikt kunnen worden om te compileren J2ME broncode in te class-bestanden die geschikt zijn voor mobiele apparaten.  Merk op dat de Sun „J2ME Wireless Toolkit,“ dat besproken werd in een later deel van dit artikel, vereist het downloaden van de Java SDK beschreven in deze sectie. 

3.1 JDK 1.4 (of later)

Dit betekent dat u het nodig hebt conventionele Java 2 SDK uit Sun.  Ik gedownload en gebruikt versie 1.4 via de volgende link:
http://java.sun.com/j2se/1.4/download.html
Hier is wat de download pagina er uit ziet:
java2sdk_download_page.jpg
Start de installatie-programma.  Installeren om de standaard locatie ( c:\j2sdk1.4.0_03 ) tenzij u in staat bent pad op te lossen problemen die zich kunnen voordoen. 

3.2 Connected Limited Device Configuration (CLDC)

Ik zal niet pretenderen te weten wat dit is, maar ik gewoon gedownload vanaf de Sun website.
http://wwws.sun.com/software/communitysource/j2me/cldc/download.html
Hier is wat de belangrijkste CLDC downloaden webpagina ziet er zo uit:
cldc_download_page.jpg
Alleen 1.0.3 beschikbaar was op het moment dat ik heb bezocht.
Om te downloaden van deze, ik nodig had om zich bij Sun website.  Ik heb het volgende profiel:
Username:        anon***anon
Password:        nospamplease
Favorite color:  blue
Full name:       Prof. Anon Nospamplease
Ik downloadde het volgende bestand:
j2me_cldc-1_0_3-fcs-src-b17-winunix-14_sep_2001.zip
Ik uitgepakt naar de volgende map:
C:\j2me
Ik omgedoopt tot de „cldc-1_0_3-fcs“ directory naar eenvoudigweg:
cldc (dwz het volledige pad is c:\j2me\cldc)

3.3 Mobile Information Device Profile (MIDP)

Ik zal niet pretenderen te weten wat dit is, maar ik gewoon gedownload vanaf de Sun website.
http://java.sun.com/products/midp/
Hier is wat de belangrijkste MIDP downloaden webpagina ziet er zo uit:
midp_download_page.jpg
Ik downloadde het volgende bestand:
j2me_midp-1_0_3-fcs-src-b26-win-19_sep_2001.zip
Ik uitgepakt naar de volgende map:
C:\j2me
Ik omgedoopt tot de „midp-1_0_3-fcs“ directory naar eenvoudigweg:
midp (dwz het volledige pad is c:\j2me\midp)

3.4 Het instellen van gereedschappen

3.4.1 Opzet van paden

Voeg de volgende regels toe aan je AUTOEXEC.BAT bestand:
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%
Dan werking van deze variabelen te herladen door het uitvoeren van het batchbestand:
cmd_prompt_autoexec_bat.jpg
c:\>  autoexec.bat
U kunt ook zelf dezelfde variabelen met behulp van de Windows-omgeving variabele bedieningspaneel.

Merk op dat heb ik ervoor gekozen te specificeren expliciete directory paden naar mijn huidige versie van de Java 2 SDK.  Daarom, als ik upgrade, dan moet ik AUTOEXEC.BAT bewerken van het bestand naar de nieuwe mappen. 

3.4.2 Controleer de Jave 2 SDK binaries

Zodra de bovenstaande instellingen van kracht worden, moet je in staat om de Java hulpprogramma's uit de opdrachtprompt zonder vermelding van de volledige pad naar het hulpprogramma's. 

Het volgende commando start de mobiele telefoon apparaat emulator: 
cmd_prompt_midp.jpg
c:\>  midp
Het volgende plaatje laat de mobiele telefoon apparaat emulator: 
java_midp_launch.jpg

4. Simple J2ME programma

4.1 Schrijf Java code

Met behulp van een tekst-editor, een persoon kunt typen in code, zoals voor dit HelloMIDlet.java broncode bestand:
file_image_hellomidlet_java.jpg
Hier is de code in plain text-formaat:
// 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 Compileer *.java code aan *.class

cd  c:\HelloMIDlet
Let op: De volgende opdracht moet op een lijn, maar is uitgebreid naar meerdere regels tekst alleen voor de duidelijkheid.
(Huidige map: C:\HelloMIDlet)
javac
    -target 1.1
    -d .\
    -bootclasspath c:\j2me\midp\classes
    HelloMIDlet.java
cmd_prompt_javac.jpg
Opmerking: De „-target 1.1“ is noodzakelijk om te vermijden dat een fout in de toekomst „preverify“ stadium.  Blijkbaar dit iets te maken heeft met een probleem met MIDP 1.0.3 ondersteuning in JDK 1.4. 

4.3 Preverify voor het genereren van een nieuw bestand *.class

cmd_prompt_preverify.jpg
(Huidige map: C:\HelloMIDlet)
preverify  -classpath  c:\j2me\midp\classes;.  HelloMIDlet
Dit genereert een nieuwe *.class bestand in een nieuwe submap genaamd „output“ (standaard).

4.4 Test de nieuwe *.class bestand

cmd_prompt_midp_midlet.jpg
(Huidige map: C:\HelloMIDlet)
midp  -classpath  c:\j2me\midp\classes;.\output  HelloMIDlet
Dit begint de telefoon emulator, wat aangeeft dat de nieuwe „output“ directory bevat een deel van de noodzakelijke *.class bestanden.
De onderstaande afbeelding toont het verwachte resultaat.
java_midp_hellomidlet.jpg

4.5 Maak een nieuw tekstbestand, „manifest.mf“, en bewerk het bestand

Een „manifest.mf“ bestand is van essentieel belang om het verkrijgen van een werkelijke mobiele telefoon bij de interpretatie van de inhoud van een *.jar bestand.  Als een goede „manifest.mf“ bestand is niet opgenomen in het *.jar bestand, dan wordt de mobiele telefoon kunnen downloaden met succes de *.jar bestand, maar wellicht niet zullen interpreteren het gedownloade bestand, eventueel in de rapportage een fout zoals „Unsupported Content Type“. 
Het volgende is een voorbeeld van een eenvoudige „manifest.mf“ bestand.
file_image_manifest_mf.jpg
Hier is de „manifest.mf“ bestand als platte tekst: 
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
Merk op dat de CLDC en MIDP versies worden in dit dossier.  Wees zeer voorzichtig en conservatief bij het bewerken van de verschillende velden in dit dossier.  Als je „File Corrupt“ fouten, en probeer vervolgens de opheffing van alle gebieden die niet in dit voorbeeld.  Ook zetten de velden in de volgorde waarin ze worden weergegeven in het voorbeeld.  Ook inkorten elk veld waarde zoveel als je kunt, en houden de personages beperkt tot eenvoudige letters, cijfers, punten, en streepjes.  Sommige gsm-diensten en mobiele telefoons, kan tolereren meer variatie van het veld bestellen en inhoud van velden. 
Let op: 

Wanneer de „jar“ programma wordt gebruikt voor het maken van een *.jar bestand en de „manifest.mf“ bestand is opgegeven als het manifest bestand, de „jar“ programma leest het manifest bestand en zou dit kunnen leiden tot meer velden want het schept een bestand met de naam „MANIFEST.MF“ binnen de *.jar output bestand.  Daarom, als de „MANIFEST.MF“ bestand wordt gewonnen uit een *.jar bestand en wordt vervolgens vergeleken met het oorspronkelijke bestand „manifest.mf“ opgegeven tijdens het aanmaken van de *.jar, de twee bestanden anders kan zijn, met de „MANIFEST.MF“ bestand met meerdere velden meer dan het oorspronkelijke bestand „manifest.mf“ . 

Niet extract „MANIFEST.MF“ een bestand uit een *.jar bestand en poging tot een nieuwe *.jar bestand aan de hand van dat manifest bestand.  Als u een uittreksel „MANIFEST.MF“ bestand uit een *.jar bestand heeft, dan moet u op om alle velden behalve voor diegenen in het voorbeeld hierboven getoond „manifest.mf“ bestand. 
Opmerking:

Pictogrammen voor programma's blijkbaar niet op de Motorola T720 telefoon.  Dit is de reden waarom ik niet beschrijven mijn MIDlet met een pictogram.  Echter, de volgende laat zien hoe u een pictogram van het programma binnen het manifest bestand: 

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

Bij het ontwikkelen voor mobiele telefoons dat doen voor toepassingen weer te geven, geeft het pictogram bestandsnaam, en voeg het pictogram image bestand zelf aan de *.jar bestand onder vermelding van de naam van het bestand tussen de bestandsnamen van bestanden worden toegevoegd aan de *.jar bestand. 

4.6 Doe de „manifest.mf“ bestand en *.class bestand naar een bestand *.jar

De volgende commando maakt een *.jar bestand.  De *.jar bestand bevat de opgegeven manifest.mf bestand, en bevat het *.class bestanden gevonden in de opgegeven map.
cmd_prompt_jar.jpg
Huidige map: C:\HelloMIDlet
jar  cfm  hi.jar  manifest.mf  -C .\output  HelloMIDlet.class
Complex hypothetische voorbeeld van het scheppen van een bestand *.jar
Stel dat een icoon afbeeldingsbestanden (bijv.  „icon.png“) is te verschijnen in een *.jar bestand als „/icon.png“.  (Opmerking: Program pictogrammen verschijnen niet op het Motorola T720 mobiele telefoon, maar wel op andere mobiele telefoon typen, en verschijnen in de MIDP emulator.) 

Stel er is een map genaamd „images“ met beeldbestanden (*.png formaat).  Stel deze directory, en al de afbeeldingen in de map, moet toegankelijk zijn voor de Java programma door de relatieve /images directory (bijvoorbeeld dat een afbeelding „a.png“ bereikbaar zijn met behulp van het pad „/images/a.png“). 

Stel dat al het *.class-bestanden aangemaakt door de preverify opdracht zijn vervat in een map genaamd „verified“.  Bijvoorbeeld, de gecontroleerde versie van de belangrijkste klasse, „MyApp.class“, zou in het „verified“ map, samen met de andere klassen van het programma.  Al deze lessen zijn ook toegankelijk te zijn in de root directory van de *.jar bestand. 

Het volgende commando zal een bestand dat *.jar behaalt de verschillende doelstellingen genoemd in de voorgaande punten.  Let op: de opdracht is uitgebreid tot meerdere regels tekst hier alleen voor de duidelijkheid.  Bij het invoeren van de opdracht bij een opdrachtprompt de opdracht mag geen witregels, anders wordt het commando interpreter zal interpreteren van de tekst als meerdere onafhankelijke commando's. 

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 .
Het laatste deel van de opdracht is moeilijk te begrijpen.  Het heeft de volgende betekenis:  „Wijzig de huidige directory te .\verified, en vervolgens alle bestanden *.class gevonden in de relatieve directory '.' (*.class namelijk alle bestanden in de huidige map) aan bij de *.jar bestand.“  Omdat de directory was veranderd voordat vermelding van het pad van de klassen te zetten in de *.jar bestand, het lokale pad zal niet verschijnen in het relatieve pad wanneer de bestanden worden geplaatst bij de *.jar bestand. 

Bijvoorbeeld, stel de gecontroleerde klassen worden in de volgende directory: 

C:\MyApp\verified 

Stel er zijn klasse bestanden, zoals de volgende: 

C:\MyApp\verified\w.class 

Dan „-C .\verified .“  vermelding in de opdracht om de *.jar bestand, uitgaande van een huidige directory van „C:\MyApp“, zal resulteren in „w.class“ wordt geplaatst in de root directory van de *.jar bestand.  </ e>

Waarschuwing: Als de „-C“ optie is opgegeven, dan verandert de huidige werk-directory op dat moment van de verwerking van de totale sequentie van commando parameters aan het jar commando.  Daarom is de opdracht jar misschien klagen dat ze niet kunnen vinden en andere bestanden vermeld in de command parameters dan de „-C“ optie.  Als dit gebeurt, verplaatst simpelweg de „-C .\verified .“  worden de definitieve parameters van de totale opdracht. 

Het volgende toont verbose output van de jar commando. 
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 Aanmaken en bewerken van een nieuw bestand *.jad

Een *.jad bestand is nodig zodat de mobiele telefoon kunnen beschrijft een computerprogramma om een persoon voor de persoon die beslist om het programma te downloaden.  De *.jad bestand ook een aantal indirecte uit de *.jar zelf. 
file_image_hi_jad.jpg
Een voorbeeld *.jad bestand beschrijft een *.jar bestand
Hier is het voorbeeld hi.jad bestand in plain text-formaat:
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
Er zijn programma's die kunnen leiden tot de *.jad bestand, wat het eenvoudiger maakt om de „MIDlet-Jar-Size:“ veld elke keer als de *.jar bestand is veranderd (en de grootte van wijzigingen).  Als u zoeken op het internet vindt u nuttige J2ME programma's. 

Als de grootte veld specificeert niet de exacte byte totaal van de *.jar bestand heeft, dan kan de volgende foutmelding verschijnen na een geslaagde download naar een mobiele telefoon: „Download Failed“ (download mislukt). 

Voor de Motorola T720 mobiele telefoon, wordt het volgende foutbericht kan worden gebruikt om inidcate ongeldige velden in het *.jad bestand, of eventueel ongeldige velden in het bestand gegenereerd MANIFEST.MF binnen de *.jar bestand: „Failed: File Corrupt“ (mislukt: bestand corrupt). 
Opmerking: Als de *.jar-bestand in dezelfde directory als de overeenkomstige *.jad bestand op een Internet web server, dan is de *.jad bestand kan gewoon de bestandsnaam van het bestand *.jar, zonder vermelding van een volledige URL, zoals in het volgende voorbeeld: 

MIDlet-Jar-URL: hi.jar 

Tijdens het downloaden van deze bestanden vanaf een Apache Internet web server naar een Motorola T720 mobiele telefoon, is het aanvaardbaar om niet de volledige URL.  Echter, bij het downloaden van deze bestanden vanaf een Yahoo!  Internet web server naar een Motorola T720 mobiele telefoon, de poging om te downloaden zal falen, tenzij een URL volledige pad naar de *.jar bestand is opgegeven in de *.jad bestand, zoals in het volgende voorbeeld: 

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

Ik weet niet de reden voor dit probleem, en ik weet dat dit probleem niet van invloed op andere mobiele telefoons (gsm of dienstverleners).  Na het bepalen van de volledige URL voor de *.jar bestand in de *.jad bestand is natuurlijk lastig, omdat het verplaatsen van de bestanden naar verschillende locaties op een server zou moeten worden veranderd de informatie in alle *.jad bestanden.  Echter, met vermelding van de volledige URL zou kunnen maken van de *.jad meer betrouwbaar zijn voor bepaalde mobiele telefoons en bepaalde mobiele telefoon aanbieders. 

4.8 Test de *.jar bestand en de *.jad dossier bij de uitvoering van het programma

De volgende voert de klas gevonden in de *.jar bestand, beschreven door de *.jad bestand. 
cmd_prompt_midp_jar_jad.jpg
(Huidige map: C:\HelloMIDlet)
midp  -classpath c:\j2me\midp\classes;.\hi.jar  -descriptor hi.jad

4.9 Referenties naar J2ME, MIDP, CLDC ontwikkeling

Veel van wat ik hier gepresenteerd worden zijn te vinden op vele andere websites.  Maar ik corrigeerde enkele fouten gevonden op andere websites, en voegden er details ontbreken, en presenteert de complete ervaring van iemand die probeert te doen dit spul.  Hier zijn zeer informatieve links die mij geholpen de slag te gaan: 
http://wireless.java.sun.com/midp/articles/getstart
http://wireless.java.sun.com/midp/articles/setup

5. Complexe programma J2ME

5.1 Inleiding

De eenvoudig programma dat in de vorige sectie van dit document slechts een broncode bestand, en het programma doet bijna niets en is dus niet echt een goed voorbeeld van de mobiele telefoon programmeren. 

Mijn vriend Sam Robertson schreef een interessant programma dat J2ME leert een persoon te spelen het kaartspel „Blackjack“ (ook wel „21“).  Een speler wordt gepresenteerd „met“ een dealer „kaart, en“ de speler twee kaarten, en de speler moet beslissen wat te doen: „de verblijfsduur, hit, double-down, of“ worden gesplitst. 

Dit programma heeft zes broncode-bestanden.  Het programma reageert op input van de gebruiker, en hoeft eenvoudige tekening en tekst updates. 
sbj_screen_on_phone.jpg

5.2 Broncode

Klik op de onderstaande link om de broncode, en de *.jad bestand, „manifest.mf“ bestand en een batchbestand, alles in een handige ZIP bestand.
sbj.zip
Source code in een bestand ZIP
6090 bytes
MD5: bf3922035b7a4eef24e107d03b7524c9
Uittreksel naar een willekeurige directory, maar als u het uittreksel aan „c:\“ onder Windows, het volgende voorbeeld zal de discussie worden nog dichter bij uw werkelijke situatie.
sbj_directory_files.jpg
Extracting sbj.zip te „c:\“ creëert de directory „c:\sbj“

5.3 Manifest bestand

Dossier: „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 De batch-bestand op te bouwen het programma

De volgende batch-bestand is ruig, maar het dient als een voorbeeld van hoe je misschien de slag te gaan met het schrijven van uw eigen batch-bestand op te bouwen uw J2ME programma.  Dit voorbeeld batchbestand doet het volgende:
(1) Verwijder de map met de oude *.class bestanden; 
(2) Verwijder de map met de oude geverifieerd *.class bestanden; 
Maak een (3) „klassen“ output directory; 
(4) Compileer alle *.java bronnen in te *.class bestanden, met uitgang naar de „klassen“ directory. 
(5) Maak een „gecontroleerde“ output directory; 
(6) Preverify alle klassen „in“ de klassen directory, en zette de gecontroleerde klassen in „de“ gecontroleerde directory. 
(7) Maak een *.jar bestand en voeg de mainfest bestand en alle klassen in „de“ gecontroleerde directory; 
*(8) Test het programma via de preverified klassen direct; 
*(9) Test het programma via de *.jar en *.jad bestanden; 

(*...  Deze stappen worden uitgeschakeld (door commentaar) in mijn batch bestand.) 
sbj_build_sbj_bat_file.jpg
Het batchbestand „build_sbj.bat“ voor de opbouw van het programma
Hier is het hetzelfde bestand („build_sbj.bat“) in plain text-formaat:
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 Gebouw van het prompt

Hier is het resultaat van de exploitatie van de „build_sbj.bat“ batchbestand op de opdrachtregel:
sbj_build_command_prompt.jpg
Het uitvoeren van de „build_sbj.bat“ batchbestand
Merk op dat de waarschuwende berichten voor de „rmdir“ en „del“ operaties geven aan dat er niets te verwijderen. 

U kunt zien dat de nieuwe directories (dwz „classes“ en „verified“) en de nieuwe *.jar bestand dat het gevolg is van het uitvoeren van het batchbestand:
sbj_new_files_after_build.jpg
Broncode bestanden en nieuw gegenereerde bestand

5.6 *.jad bestand

Voor implementatie van de sbj.jar bestand, moeten we het maken en bewerken van de sbj.jad bestand naar de juiste grootte *.jar in het juiste veld:
Dossier: 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
Een persoon kan hierbij gaan om de toevoeging van de complete URL aan de *.jar bestand wanneer de *.jad bestand wordt gelegd op een internet site - maar ik ontdekt (door een experiment), dat ik in staat was om met vermelding van de volledige URL (dat wil zeggen, ik alleen de gespecificeerde *.jar bestandsnaam door zelf).  Echter, de invoering van de complete URL, maar ik wilde je even laten weten wat ik heb waargenomen.

5.7 Samenvatting

Na meerdere bronbestanden in uw project komt vaak voor, en in dit hoofdstuk gaven wij een grof voorbeeld van het bouwen van meerdere klassen, gevolgd door de verpakking en uitvoering. 

Raadpleeg de volgende sectie betreffende het gebruik van Sun Wireless Toolkit, waardoor het bouwen van toepassingen veel eenvoudiger. 

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

6.1 Inleiding

Sun biedt een gunstige ontwikkeling voor de bouw van milieu-en verpakkingskosten J2ME programma's: „Java 2 Platform Micro Edition (J2ME) Wireless Toolkit (version 1.0.4_01)“. 

(Let op: U moet het downloaden van de Java 2 SDK 1.4 zoals beschreven in een eerder deel aan het gebruik van deze toolkit.  Doet u dit nu als je niet al deze versie van de Java 2 SDK.) 

Ga naar het volgende Internet-site voor het downloaden van de toolkit: 

http://java.sun.com/products/j2mewtoolkit/ 
Let op!
 

NIET op de link klikt „2.0 Beta 1 English“ (momenteel boven download-optie) als je aan het doen zijn Motorola T720 ontwikkeling - omdat deze versie heeft een aantal MIDP-2.0 spul, en het verkrijgen van rond kan dit hoofdpijn. 
j2me_wireless_toolkit_2_0_download_page.jpg
Niet downloaden van deze versie!  („2.0 Beta 1 English“)
Ik heb geprobeerd deze versie, en ik heb uiteindelijk code te compileren met veel rommelige wijzigen van de instellingen, maar na alle moeite kreeg ik een uitzondering zekerheid toen ik probeerde uit te voeren.  Niet storen! 
Download de „1.0.4_01 English“ versie.  Hier is wat de download pagina er uit ziet: 
j2me_wireless_toolkit_1_0_4_01_download_page.jpg
De Sun J2ME Wireless Toolkit (version 1.0.4_01) download pagina
j2me_wireless_toolkit_1_0_4_01_download_page2.jpg
De Sun J2ME Wireless Toolkit (version 1.0.4_01) FTP site lijst
Dit zal download het volgende bestand: „j2me_wireless_toolkit-1_0_4_01-bin-win.exe“ 
Voer dit programma te installeren op uw systeem.

6.2 J2ME Wireless Toolkit: lancering werkbalk

Na de toolkit is geïnstalleerd, kunt u starten via de „Start“ (start) menu systeem:
j2me_wireless_toolkit_1_0_4_ktoolbar.jpg
Starten van het programma werkbalk
U kunt ook toegang krijgen tot MIDP-1.0 documentatie via de „Documentation“ item in deze Start (start) menu.
j2me_wireless_toolkit_2_0_wtk20_docs_api_index_html.jpg
J2ME Wireless Toolkit (version 1.0.4_01) documentatie

6.3 J2ME Wireless Toolkit: maak project en bouwen

j2me_wireless_toolkit_1_4_ktoolbar_window.jpg
De werkbalk is klaar.  Klik „New Project...“  om een nieuw project.
j2me_wireless_toolkit_1_4_ktoolbar_new_project.jpg
New Project: Typ in het project naam (wordt JAR naam en de naam van het nieuwe project directory) en typ in MIDlet class naam (klasse afgeleid van MIDlet, in wezen de belangrijkste klasse van uw aanvraag). 
j2me_wireless_toolkit_1_4_ktoolbar_project_created.jpg
Werkbalk: project gemaakt.  Merk op dat de console vertelt je waar we uw *.java bron bestanden, enz.  (bijv.  „c:\WTK104\apps\sbj\src“, etc) 
j2me_wireless_toolkit_1_4_ktoolbar_project_settings.jpg
Klik op „Settings...“  op de werkbalk om dit project settings menu. 
Minachting „MIDlet-Jar-Size“ het gebied (met de „waarde“ 100 bytes) voor nu.  We zullen uiteindelijk leiden tot de juiste waarde te krijgen set. 
j2me_wireless_toolkit_1_4_ktoolbar_project_midlet_settings.jpg
Klik op het tabblad MIDlets van het project instellingen.
Klik op de enige rij in de tabel („MIDlet-1“) te markeren en te selecteren.  Vervolgens klikt u op de knop „Edit“. 
j2me_wireless_toolkit_1_4_ktoolbar_project_no_icon.jpg
Schakel het gebied „Icon“ indien u niet beschikt over een *.png bestand aan in je *.jar bestand. 
Doe het volgende: 

(1) Project --> Clean: verwijdert alle bestanden *.class;
(2) Build : Builds *.class alle bestanden en preverifies;
(3) Project --> Package --> Create Package : produceert *.jar en *.jad
j2me_wireless_toolkit_1_4_ktoolbar_clean_build_create_package.jpg
Het resultaat van de opbouw van de *.jar en *.jad
Wanneer u deze drie stappen, waarvan de daaruit voortvloeiende *.jar en *.jad is onmiddellijk klaar voor de uitvoering in de lokale emulator, of voor onmiddellijke inzet op uw internet site voor het downloaden van anderen „over-the-air“ (OTA).  De *.jar grootte *.jad veld in het bestand wordt correct.  Vergeet niet te doen stap (3) elke keer dat u herbouwen! 

Nu kan je testen door middel „Run“ (uitvoeren) toets. 
j2me_wireless_toolkit_1_4_ktoolbar_project_launch.jpg
j2me_wireless_toolkit_1_4_ktoolbar_project_running.jpg
Hitting „Run“ voor het project leest de *.jad in op de emulator.  U kunt kiezen voor een specifieke MIDlet te starten (meestal slechts een). 
Kopieer gewoon de *.jar en *.jad bestanden van de opgegeven locaties (gerapporteerd door de werkbalk van de console tijdens een build van het project), zoals:
(Uit de console:)
Wrote c:\WTK104\apps\sbj\bin\sbj.jar
Wrote c:\WTK104\apps\sbj\bin\sbj.jad
Doe deze bestanden direct op uw internet site zonder modificatie, en het zou moeten werken.  Hier is wat ik zag op mijn mobiele telefoon na het downloaden van deze gecompileerd aanvraag „via de ether“ (OTA)
sbj_screen_on_phone.jpg
Sam Robertson's Blackjack Trainer (sbj.jar) uitvoeren op mijn mobiele telefoon

7. Het aanbieden van software op een internet site

7.1 Zorg ervoor dat de Internet web server specificeert MIME typen *.jar bestanden en bestanden *.jad

Als u een Apache Internet web server, moet je een bestand met de naam „.htaccess“ binnen uw website root directory.  De „.htaccess“ bestand stelt u in staat om Apache configuratie, zoals het toevoegen of dwingende MIME file types.  U dient zich te voegen in het specificeren van de MIME soorten die overeenkomt met *.jar bestanden en *.jad bestanden, zoals blijkt uit bestand de volgende tekst: 
htaccess_image.jpg
Mijn aangepaste „.htaccess“ bestand voor de Apache Internet web server.  Opmerking: Ik heb dit bestand „.htaccess.txt“ louter om het bestand gemakkelijk te bewerken bij het gebruik van de Windows besturingssysteem.  De naam van het bestand moet worden veranderd in „.htaccess“ voordat het bestand kan worden gebruikt met de Apache Internet web server. 
Hier is mijn simpele .htaccess bestand als platte tekst:
AddType text/vnd.sun.j2me.app-descriptor jad
AddType application/java-archive jar
AddType text/vnd.wap.wml wml
Blijkbaar is het maken of wijzigen van dit bestand resulteert in een onmiddellijke wijziging van Apache server gedrag.  Ik denk dat de Apache server controleert of de modificatie datum en tijd van de „.htaccess“ bestand bij elke nieuwe inkomende transactie, en de server weer geladen dat bestand als de wijziging datum en de tijd is veranderd. 

Als u een ander soort Internet web server, moet u bepalen hoe verder te specificeren MIME typen, en u moet ervoor zorgen dat *.jar bestanden en bestanden worden toegewezen *.jad de juiste MIME types. 

Je zult weten wanneer de MIME soorten niet zijn opgezet als de mobiele telefoon weigert te downloaden van uw *.jad bestand en rapporteert de volgende foutmelding: 

„406: Not Acceptable“ 

7.2 Optioneel bieden links naar de *.jad bestand binnen HTML of WML documenten

De Motorola T720 J2ME mobiele telefoon met AT&T dienst is in staat om het downloaden van een bestand *.jad rechtstreeks, door het intikken van het URL van de *.jad bestand naar de mobiele telefoon.  Dit zal waarschijnlijk werken voor andere J2ME van mobiele telefoons met andere mobiele telefoon aanbieders. 

Toch is het wellicht handiger voor de mensen voor het downloaden van de *.jad dossier bij het selecteren van een link in een document of HTML binnen een WML document.  (Opmerking: WML is nu achterhaald.  De meeste mobiele telefoons kunnen nu interpreteren HTML.) 
file_image_hi_html.jpg
Een eenvoudige HTML document met een link naar een bestand *.jad
file_image_hi_wml.jpg
Een eenvoudige WML (WAP) pagina met een link naar een bestand *.jad  (Opmerking: WML is nu achterhaald.  De meeste mobiele telefoons kunnen nu interpreteren HTML.) 

8. Het downloaden van software vanaf een internetsite

De volgende afbeeldingen tonen de exacte volgorde van de acties Ik heb voor het downloaden en uitvoeren van de MIDlet ontwikkeld en geïmplementeerd zoals beschreven in de vorige paragrafen hierboven.  Deze beelden zijn foto's van het scherm van mijn mobiele telefoon. 
t720_screens_download_program.jpg
(1) Hoofdscherm: Wanneer u de telefoon opent, ziet u het hoofdscherm.  Druk op de middelste knop om naar het hoofdmenu. 
(2) Main Menu: Ga naar het item „WebAccess“. 
(3) WebAccess: Ga naar het item „Go To URL“. 
(4) Enter URL: Typ de URL van een *.jad bestand (of van een HTML document, of van een WML document). 
(5) Details; Deze informatie werd ontleed *.jad uit het bestand.  Druk DOWNLD voor het downloaden van de *.jar bestand. 
(6) Download Complete; Wacht op dit bericht te verdwijnen; 
(7) Installing; Wacht op dit bericht te verdwijnen; 
(8) xxxx bytes transferred; Wacht op dit bericht te verdwijnen; 
(9) Installed; Wacht op dit bericht te verdwijnen; 


Wanneer de WebAccess menu verschijnt weer, nadat het programma is geïnstalleerd, eenvoudigweg afrit elk menu om terug te keren naar het hoofdscherm. 
t720_screens_start_program.jpg
(1) Hoofdscherm: Wanneer u de telefoon opent, ziet u het hoofdscherm.  Selecteer de optie „Games & Apps“ via het hoofdmenu, of druk op de cursor naar beneden op het hoofdscherm. 
(2) Java Powered: Wacht op dit scherm te verdwijnen. 
(3) Games & Apps: Selecteer het object met de naam van je programma! 
(4) Yay!  Een succesvolle uitvoering van uw programma! 
Het programma verschijning op de mobiele telefoon is zeer vergelijkbaar met de verschijning in de emulator.

9. Download foutmeldingen en de installatie foutberichten

9.1 Motorola T720 (J2ME) foutmeldingen

De volgende fouten berichten zijn alleen relevant voor de Motorola T720 (GSM/J2ME) mobiele telefoon. 

9.1.1 „Download Failed“

Oorzaak # 1
Elk bestand (HTML, JAD, JAR, MID, GIF) over 1644 bytes zal veroorzaken deze fout voor bepaalde Internet web hosts en servers.  Hier is een korte lijst van hosts en servers: 
Host / Server                                               Error
===================================================    =================
Apache                                                       No
Microsoft Personal Web Server (direct from your PC)          No
Earthlink (Apache)                                           No
Yahoo! (custom server)                                       Yes
Het probleem is te wijten aan een fout in de firmware Motorola T720 GSM/J2ME, welke ervoor zorgt dat het downloaden van bestanden in fragmenten te mislukken.
De enige oplossing is om over te schakelen Internet web hosts of server type.  Andere typen mobiele telefoon dit probleem niet hebben. 
Oorzaak # 2
De „MIDlet-Jar-Size:“ veld van een *.jad dossier geen aanwijzingen voor de exacte byte totaal van de overeenkomstige *.jar bestand.

9.1.2 „Failed: File Corrupt“

Oorzaak # 1
De *.jar bestand gebruikt API functies die niet beschikbaar zijn op de specifieke mobiele telefoon. 

Bijvoorbeeld, MIDP 2.0 functies zijn niet beschikbaar op de Motorola T720 GSM/J2ME mobiele telefoon (die alleen is MIDP 1.0 functies).  Een programma kan uitvoeren binnen een emulator, maar kunnen niet worden uitgevoerd op de mobiele telefoon. 

De oplossing is het zoeken naar MIDP 2.0 functies in de broncode en ze te vervangen door MIDP 1.0 functies, of beëindigen van de functies die vereisen dat de MIDP 2.0 functies. 
Oorzaak # 2
De „manifest.mf“ bestand gebruikt voor het maken van de *.jar bestand (via de „jar“ utility) fouten bevat. 

Zorg ervoor dat de „manifest.mf“ bestand heeft de volgende versies van CLDC en MIDP: 
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
Het gehele bestand „manifest.mf“ bijna precies zo ziet als het volgende: 
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
Elke regel van de tekst in de „manifest.mf“ bestand, inclusief de laatste regel van het bestand moet eindigen met een „carraige terugkeer“ (CR; 13; 0x0d) karakter, gevolgd door een „line feed“ (LF; 10; 0x0a) karakter. 

De enige „manifest.mf“ velden van het bestand in uw eigen versie van het bestand dat moet afwijken van de hier getoonde voorbeeld de eerste drie gebieden die in het voorbeeld.  De laatste drie velden moet een exacte match met het voorbeeld, en de laatste twee karakters van het bestand moet „het“ vervoer „line feed terugkeer en“ na het laatste veld. 

Hier zijn mogelijke problemen in uw versie van de „manifest.mf“ bestand: 
(1) Uw „manifest.mf“ bestand bevat tekens die niet ASCII tekens; (Kijk eens naar een grafiek van ASCII karakters; elk teken buiten het bereik van 0 tot en met 127 is ongeldig); 
(2) Uw „manifest.mf“ bestand „niet“ over een „line-feed“ (LF) teken na iedere „carriage return“ (CR) karakter aan het einde van elke regel; 
(3) Uw „manifest.mf“ bestand heeft onzichtbare spaties of tabs aan het einde van elke regel vóór de beëindiging (CR)(LF) lijn; 
(4) Uw „manifest.mf“ bestand bevat een „Manifest-Version:“ lijn; 
(5) De laatste regel van uw „manifest.mf“ bestand niet eindigen met een (CR)(LF) lijn wordt beëindigd, maar in plaats daarvan gewoon tot het einde van het bestand; 
(6) Uw „manifest.mf“ bestand niet de juiste velden en de exacte volgorde van de velden in zoals getoond in het voorbeeld hierboven; 
(7) Uw CLDC versie is niet precies 1.0 of uw MIDP versie is niet precies 1.0; 
(8) Uw leverancier heeft naam karakters die niet ASCII tekens (bijv.  geen Unicode-tekens zijn toegestaan); 
(9) Uw „manifest.mf“ bestand heeft geen spatie na de komma in de tweede „MIDlet-1:“ lijn; 
Misschien dat sommige van de hierboven genoemde gevallen niet echt voor problemen zorgen voor veel mobiele telefoons, maar de opheffing van het geheel van de hierboven opgesomde gevallen in staat kan stellen de download te slagen.  Na het downloaden is voltooid, kunt u experimenteren met variaties van de „manifest.mf“ bestand te ontdekken wat andere dingen die je kunt doen zonder dat het downloaden van fouten.  Wanneer de „manifest.mf“ bestand wordt gewijzigd, is het belangrijk om te controleren of het downloaden van het programma blijft werken voor alle doelgroepen van mobiele telefoons en mobiele telefoon aanbieders.  Sommige telefoons en diensten zijn minder flexibel zijn dan anderen. 

„manifest.mf“ Wanneer een bestand wordt toegevoegd aan een *.jar bestand via de jar programma, de jar programma maakt een nieuwe versie van het manifest bestand in de *.jar bestand.  De gegenereerde versie van het manifest bestand in de *.jar bestand is „MANIFEST.MF“.  De jar programma kunnen toevoegen aan dit bestand velden die niet bestaan in de „manifest.mf“ dossier van de programmeur.  Niet extract „MANIFEST.MF“ een bestand uit een *.jar bestand, tenzij u bereid bent om wat velden en maken de resterende velden er precies hetzelfde uitzien als het voorbeeld „manifest.mf“ bestand hierboven aangegeven. 

9.1.3 „Unsupported Content Type“

Oorzaak # 1