52
Tags:
java
Skrevet af
Bruger #1
@ 28.05.2004
Jeg vil starte denne artikel med en indrømmelse: Det har aldrig rigtigt interesseret mig at kode Java, selvom vi har brugt det i al den tid jeg har læst til datamatiker (2 år)! Jeg har sådan set ingen problemer i at se alle de smarte ting i Java, som fx platforumsuafhængighed (må jo nok siges at være den vigtigste) – jeg har bare ikke rigtigt haft brug for de ting Java har kunne tilbyde mig, og samtidig har jeg ikke følt at jeg kunne lave noget brugbart med det. Java applikationer er som regel lidt langsomme, og samtidig bryder jeg mig ikke om deres look. At lave et GUI med Java er samtidig noget af det mest besværlige jeg har prøvet, og der er ikke gået lang tid før jeg har sendt længselsfulde blikke efter Delphi (som stadig er mit foretrukne udviklingsmiljø). Jeg ved at mange er glade for Java, så jeg vil naturligvis understrege at dette er mine helt personlige meninger!
Der hvor det endelig blev sjovt at kode Java, var da vi kunne få programmering til mobilen som valgfag, for her synes jeg virkelig at Java har sine fordele! I dag findes der millionvis af mobiltelefoner der understøtter Java, og det er faktisk overraskende let at skrive software til disse – og sjovt!
I denne artikel vil jeg give en lidt teoretisk introduktion til det der kaldes for J2ME (Java 2 Micro Edition), hvilket er det begreb der dækker over Java på mobiltelefoner og andre "small devices". Derudover vil jeg fortælle hvilke værktøjer man skal bruge, samt hvor man kan få fat i dem. Jeg slutter af med et simpelt kodeeksempel. Lidt viden om normal Java (J2SE) kan anbefales.
MIDP, CLDC osv.
Der er naturligvis lidt teoretisk information man bør kende til, når man skal lære en ny teknologi. På den anden side ved jeg også godt at det som regel er mere interessant at komme i gang med at skrive noget kode, så derfor vil jeg gøre den teoretiske del lidt kort. Vil man lære lidt mere teori (og det bør man nok), kan man investere i en god bog omkring emnet.
Det mest basale man bør vide omkring J2ME, er dets opdeling. J2ME dækker som sådan ikke over et specifikt stykke software eller specifikation – det betyder som sagt bare Java til små enheder. Det er delt op i 3 ting: Konfigurationer, profiler og ekstra API'er. En konfiguration fortæller om krav til den enhed det skal køres på: Hvor meget hukommelse skal der være, hvor stærk en CPU skal der være osv. Profiler er lidt mere specifikke, og definerer API'er til GUI's, "persistent storage", som er den mekaniske der bruges til at gemme simple indstillinger i enheders hukommelse, samt andre ting. Det sidste er eksra API'er, der er helt specifikt for en enhed. Fx kan Nokia vælge at lave et API deres kameramobiler, der tillader J2ME programmøren at bruge kameraet gennem sine programmer.
Der er to begreber som man i hvert fald bør kende til, og det er MIDP (Mobile Information Device Profile) og CLDC (Connected, Limited Device Configuration), for begge dele har indflydelse på den software du skal skrive. Det første er en profil, det andet er en konfiguration, og dem har du jo lige læst om
. CLDC er nu kommet i version 1.1, og MIDP er kommet i version 2.0. De fleste af de mobiltelefoner der er på markedet i dag er dog stadig baseret på CLDC 1.0 og MIDP 1.0 – kun de nyeste har MIDP 2.0, og kun de allernyeste har også CLDC 1.1. Dette er ikke et problem i sig, om end mulighederne er lidt mere begrænsede i de ældre versioner. Fx har CLDC 1.0 ikke mulighed for at behandle kommatal, hvilket sikkert godt kan virke lidt utroligt for nogen. Man skal dog huske på at de processorer der sider i fx mobiltelefoner ikke har de vilde kræfter – for dem er beregninger med kommatal virkelig hårdt arbejde!
Værktøjer
For at lave vores første MIDlet, som de små programmer til mobilen så fint kaldes (nanvnet kan sammenlignes med Applets til websites), skal vi bruge nogle værktøjer. En editor og en compiler er jo som regel nok, og det er også næsten tilfældet her. MIDlets er jo ikke helt almindelige programmer, og derfor bruger man nogle forskellige værktøjer til de forskellige steps i udviklingsprocessen. Sun, dem der sjovt nok også laver Java, har lavet et ganske godt toolkit, der kan det hele. Har vi det, skal vi bare bruge en editor til at skrive Java koden med, og der kan Notepad jo bruges, selvom jeg personligt foretrækker et IDE som JBuilder til det. Sun's J2ME Wireless Toolkit kan hentes fra følgende adresse:
http://java.sun.com/products/j2mewtoolkit/. Når det er installeret er du sådan set klar til at gå i gang, så lad os da skrive vores første lille applikation!
Hello..? World?
Næsten alle gode begynderartikler starter jo med et "Hello world" eksempel. Det lader dog til at det er ved at blive så stor en cliche at nogen går bort fra det, og skriver "Hello universe" eksempler eller noget helt andet. Derfor vil jeg forsøge at holde den gode gamle "Hello world" tradition ved lige, ved selv at diske op med sådan et eksempel
.
Jeg går ud fra at du har fået installeret J2ME Wireless Toolkit (fra nu af bare WTK), og du skal nu starte det (af uransagelige årsager vil det være oprettet som "KToolbar" i din Start menu). Som du kan se er det dejligt simpelt. Klik på "New project", skriv "HelloWorld" i første felt, og det samme i næste felt – ikke så meget pjat der
. Tryk på "Create project". Nu får vi en masse indstillinger for projektet smidt i hovedet. I første omgang skal vi ikke gøre så meget her. Planlægger du at lægge dette eksempel over på din mobiltelefon, bør du vælge MIDP 1.0 i "Target platform" – ellers betyder det ikke det store. Tryk på "Ok", og dit projekt er oprettet.
Nu skal vi have skrevet lidt kode, og du skal derfor starte den editor du nu foretrækker at bruge til at skrive Java kode med. Notepad er som sagt fin nok, hvis dine krav ikke er specielt store
. Vi starter med at gemme, da det er vigtigt at filen har det rigtige navn og placeres det rigtige sted. Filen skal gemmes som HelloWorld.java, og da mit WTK er installeret i "C:\\WTK21\\", gemmer jeg filen i: "C:\\WTK21\\apps\\HelloWorld\\src\\". Som sagt har dette en betydning, så husk at gøre det som jeg beskriver. Nu skal vi, langt om længe, skrive lidt kode
. Her kommer vores første MIDlet, samt en forklaring af koden.
Koden
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class HelloWorld
extends MIDlet
implements CommandListener
{
private Form mMainForm;
public HelloWorld()
{
mMainForm = new Form("Min første MIDlet");
mMainForm.append(new StringItem(null, "Hello world!"));
mMainForm.addCommand(new Command("Afslut", Command.EXIT, 0));
mMainForm.setCommandListener(this);
}
public void startApp()
{
Display.getDisplay(this).setCurrent(mMainForm);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable s)
{
notifyDestroyed();
}
}
Det kan måske virke lidt voldsomt at der skal så meget kode til så lidt, men der er naturligvis en god forklaring
. Som i kan se i toppen, lader vi vores program nedarve fra MIDlet, og implementere interfacet CommandListener. MIDlet er den klasse som alle MIDlet's nedarver fra, og da det er en abstrakt klasse, lover vi at implementere de abstrakte metoder den har, nemlig startApp(), pauseApp() og destroyApp(). Når man implementerer et interface lover man også at implementere de metoder det har, og da vi vælger at implementere CommandListener skal vi også have en commandAction() metode. Men hvad gør de så? Tjah, som i kan se vælger vi ikke at bruge pauseApp() og destroyApp() – vi har nemlig ikke brug for dem, men de skal være der for at koden kan compile, som jeg forklarede lige før.
Vores program har også en constructor, og det er sådan set primært den vi bruger. Lige efter at den er kaldt, vil vores startApp() blive kaldt. Men hvad sker der i koden? Jo, til at starte med har vi deklareret en såkaldt Form, hvilket udviklere der bruger fx Delphi eller VB nok vil nikke genkendende til. Forms bruges til at placere andre ting på, og ligesom i fx Windows, har en Form en overskrift (eller kan i hvert fald have det), samt noget indhold, fx tekst eller forskellige kontroller. I vores tilfælde opretter vi en tekststreng, som vi "append'er" til vores Form, dvs. vi tilknytter den.
Derudover opretter vi en Command, som er sådan en smart ting der gør at vores MIDlet kan modtage imput fra enheden, som jo i dette tilfælde er en mobiltelefon. Commands er ret stort emne, og jeg vil derfor ikke komme nærmere ind på dem i denne artikel. Vi opretter som sagt en Command, af typen EXIT. Vi opretter den på vores Form, og sørger derefter at formen står og lytter efter commands. Så snart en command bliver kaldt, vil vores commandAction() metode blive kaldt. Den er lige nu meget simpel! Vi ved at vi kun har en kommando, og derfor er det også ret givet hvad der vil ske når den bliver kørt. Med notifyDestroyed() afslutter vi programmet. De parametre der kommer med metoden, gør at vi ret let kan tjekke hvilken en kommando der er kaldt, og reagere på den, men det fortæller jeg nok mere om en anden gang.
Compile & run
Nu er vi sådan set klar til at køre det. Vær sikker på at du har gemt det, og gå så tilbage til WTK. Tryk nu på Build, der gerne efter meget kort tid skulle sige " Build complete". Gør den ikke det, vil den i stedet komme med fejl, og det er så op til dig at få dem rettet. Koden her i artiklen ER testet, så virker det ikke, så tag et ekstra kig, eller copy/paste koden hvis du er utålmodig. Når projektet er bygget (dvs. compilet), kan vi køre det. Sun har været så flinke at inkludere en række emulatorer i toolkit'et, og det er sådan en der bliver brugt når du trykker på "Run". En fin mobiltelefon dukker op på din skærm, og du vil se navnet på vores fine applikation. Tryk på "Launch", og du ser det simple output som vores hårde arbejde har skabt
. Den kan dog også en enkelt ting, udover at udskrive tekst – den kan afslutte! Tryk på den knap der svarer til "Afslut", og du vil se at det stykke kode vi skrev i vores commandAction() rent faktisk virker. Uden det ville der intet ske ved tryk på knappen.
Og det var så det. Jeg satser på at skrive mindst en artikel mere, og gå lidt mere i dybden med nogle af tingene, samt give et lidt mere avanceret eksempel. Håber i kan bruge det til noget
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (41)
Omg Super fedt! Fed artikel
4 her fra
Tænkte på om man ikke kunne lave en mobil sektion også? Til Pda og Java Progs til mobiler ?
Hej Stefan,
Tak for dit 4 tal - husk rent faktisk at rate artiklen med det 4 tal
En mobilsektion? Jeg tror ikke umiddelbart at der er behov for det som det er lige nu? Men selvfølgelig, kommer der nok forespørgsler, så er det da klart noget jeg vil overveje!
Jeg giver da også lige min stemme til en mobil sektion.. markedet stiger sindsygt indenfor det... men hvorfor bruge java når MS har deres MMIT i .Net frameworket
...
Hey Jokke,
>men hvorfor bruge java når MS har deres MMIT i .Net frameworket
Et par gode grunde:
- Der er allerede virkeligt mange Java baserede mobiltelefoner derude!
- .NET frameworket kræver vel, næsten lige meget hvor kompakt de nu laver det, noget mere end en simpel KVM (miniversionen af Java Virtual Machine), rent processor og hukommelse mæssigt?
Cool nok. Meget simpelt eksempel, men en fin start! Nu glæder vi os bare til næste artikel :-)
En mobilsektion kunne være en god idé - men det kræver jo naturligvis at der er nok til at skrive artikler, debatere etc.
Pt. satmmer hele min viden om området fra denne artikel ;-)
Kasper (TSW)
Jeg må indrømme at jeg ikke kender til krav til processer og hukommelse, da jeg kun er uddannet multimediedesigner... Men jeg har arbejdet med J2ME (meget lidt) - Min lærer satte mig lidt ind i hvorfor jeg skulle benytte .Net i stedet for..
Det er skide genialt, den måde der udvikles på... i stedet for at skrive til java-enabled telefoner - skriver du til alle... En applikation rammer samtlige enheder, og præsenterer det i det Markup language enheden nu engang understøtter - Desuden kan du benytte det server script der nu engang passer dig.. værende C#, VB.Net J.Net osv...
Se eventuelt
http://www.asp.net/mobile/flasharchitecture.aspx?tabindex=6Den 5 minutters præsentation fortæller en del.. Men hvis det er i orden kan jeg sende lidt materiale til dig over mail så du kan læse lidt mere om det...
/jokke
Øhhh tænkte du på det krævede processorkraft/hukommelse på enheden ??? fordi så kræver det intet... udover at læse normale html32/chtml/wml11/wml12/xhtml sider... Det kompakte framework, ligger nemlig ikke på den mobile enhed men serveren... det er blot en del af .Net framework 1.1... Men det smarte er så at hvis man benytter en mobil telefon med Java vitual machine på, generere .Net Compact frame work en xhtml side med java script, og hvis ikke den har JVM så generere den det i wml eller hvad der nu passer til denne......
Hvae Kasper ? Kan du hører det? "MOBIL SEKTION, MOBIL SEKTION HUJA HUJA " Hehe
Hmm Havde ratet 1 gang før? nu rater jeg sgu 5 har læst den 3 gange
den er max nice.
*Good Job*
Stefan,
Man kan ikke rate artiklen mere end én gang - det lover jeg
Jokke:
MMIT er et ekstra led til aspx.net, der gør at outputtet fra webserveren bliver tilpasset til klienten. Der er altså kun tale om websider, jeg kan derfor ikke lige forstå sammenligningen med j2me.
Hmmm.. jeg trode bare j2me var java til mobillos... lige pt arbejder jeg for et firma der har udviklet et framework til online multiplayer spil, og har derfor altid forbundet det med udvikling til mobil telefoner.... og derfor føler jeg det passende at sammenligne det med MMIT...
glemte lige at tilføje.. at jeg godt kan se jeg er lidt galt på den
Hvad siger i så.. skal jeg skrive en artikel eller to mere om emnet?
Jo, flere artikler
Kasper - Jo skriv!! Næste gang så prøv at lær os hvordan man kan lave en kode database.. Altså en database på mobilen med koder.. F.eks
Username - Password
Så kan man holde styr på dem på sin mobil!
Til DC4 telefoner
Kunne værer såååååh fedt!!
Hej Stefan,
Altså en database hvor man kan opbevare PIN koder og passwords osv? Egentlig en meget sjov ide
Vil også have noget med omkring kommunikation på et tidspunkt. Lavede på et tidspunkt et program til min mobil der kunne kontakte en lille simpel HTTP server på min laptop, der så skiftede sang på min Winamp og meldte tilbage hvilket nummet den nu spillede.. Det var lidt skægt
Forslag til emner er meget velkomne!
Jah nemlig! En sådan en! Med både username og passwords og pinkoder og sådan .. Kan aldrig holde styr på mine
og på sin mobil har man dem altid lige ved hånden
Savner lidt mere kød, men ellers en god artikel. Godt beskrevet.
Hey Thomas,
"Lidt mere kød" er lidt vagt synes jeg - hvad kunne du godt tænke dig?
Jeg har tilføjet den næste artikel til godkendelse.. Den er lidt kortere, men med ca. lige så meget teori som sidst, og så et GUI eksempel. Nu overvejer jeg så hvad der skal snakkes om hvis der kommer en efter det - det gør der jo nok
Fin nok artikel... Som altid velskrevet
Good work...
Vidste ikke at Admin skulle tilføje til godkendelse
Må da føles lidt mærkeligt at godkende sit eget arbejde
Hehe, jorv, reglerne gælder for alle
. Jeg godkender naturligvis ikke mine egne artikler, det overlader jeg til en co-admin.
Er der nogen der ved hvordan man kan ligge sine midlets ned på sin mobil-tlf? Kunne da være meget fedt!! Skal helst være over internettet!
Hey Mathias.
Du kan evt. lave en wap-side med et link til en content descriptor file, der fortæller hvad der skal downloades til telefonen.
Hey Mathias.
Du kan evt. lave en wap-side med et link til en content descriptor file, der fortæller hvad der skal downloades til telefonen.
Nu har jeg ikke læst hele artiklen, men den ser ganske god ud... Tror nu stadig jeg holder mig til Symbian C++ (er kun lige startet), selvom der ikke er så mange mobiler med Symbian (endnu?).
Ja lidt mere kød. Det er da ikke vagt
Det er da min holdning, men det kommer jo også anpå hvem målgruppen er for din artikel.
Fed artikkel lige hvad jeg stod og manglede
Jeg ville også gerne have et forum med programering til mobiltelefoner.
øøøøøø jeg kan ikke builde programmet, der står noget med at jeg skal have en fuld verion af det ?????? hvad er der galt????
"Lavede på et tidspunkt et program til min mobil der kunne kontakte en lille simpel HTTP server på min laptop, der så skiftede sang på min Winamp og meldte tilbage hvilket nummet den nu spillede.. Det var lidt skægt
"
Hejsa. Det lyder fanme nice det der, er det noget der er topsecret, eller kan man godt få den kode af vide?
Hej, Rune!
Det kan godt være at det er mig der er dum, men kan du ikke forklare lidt nærmere hvad en content descriptor file er?
Hilsen Mathias
Mener hvordan man laver den.
det er sgu iorden det virker
!! håber vi for noget mere
Hejsa
Knald god ide med et mobil forum.
Har længe gået og været ked af at jeg ikke kunne programmer min P900, Så glæder mig meget til den /de næste artiler, især den om, hvad man selv (og hvor) kan hente og komme igang. Så et flot 4 tal herfra.
Ups, den var der jo, må men ide til programmer kunne jo være hvordan man bruger f.eks bluetooch vi sin mobilos, sådan kommunikation frem og tilbage mellem computeren og telefonen.
5 Klart! Rigtig artikel der kommer ind på de basale kommandoer til J2ME.
Og Kasper: Det kune altså være rigtig fedt med en kategori omkring Mobilprogrammering her på udv.dk.
Tror det ville få flere til at interessere sig for det og nok også hjælpe mange til at komme igang med det.
Efter lidt problemer fik jeg lavet Hello World til min sony Ericsson t630. Total fed artikkel.
Ganske udmærket artikel. Men:
Man skal ikke undervurdere Java som almindelig programmeringssprog. Hverken på klientside (altså med gui) og slet ikke på serversiden.
Så jeg synes faktisk det første afsnite af artiklen er meget upassende.
Lige præcis mht look, så tror jeg ikke du finder et programmeringssprog der tilbyder så mange forskellige look and feels, som Java gør.
Og Java kan sagtens rent performance mæssigt være med f.eks. .NET platformen!
Det rigtig godt gået! Jeg er helt oppe og køre
Det rigtig godt gået! Jeg er helt oppe og køre
nice artikel
... Nu skal jeg da lege lidt med min mobil
Er programmet muligt at smide på ens mobiltelefon
?
Du skal være
logget ind for at skrive en kommentar.