pemrograman j2me

Upload: moch-cholil-habie

Post on 08-Apr-2018

239 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/6/2019 Pemrograman J2ME

    1/50

    PPee mmrrooggrraa mmaa nn A A pp lliik k aa ss ii WWiirree llee ss ss ddee nnggaa nn JJaa v v aa // JJ22MMEE

    Java 2 Standard Edition

    Pengantar Java

    Java dasarPemrograman berorientasi objek dalam JavaJava lanjutI/O Stream

    Java 2 Micro Edition

    Pengantar J2MEPengembangan aplikasi dengan J2MEMIDlet dasarEvent handlingUser interfacePemrograman database dengan RMSPemrograman client server dengan socketInstallasi aplikasi pada perangkat wireless

    Copyright 2004 CSRG STMIK-AMIKBANDUNG Jl. Jakarta 28 Bandung 40272Website http://linux.stmik-abg.ac.id

  • 8/6/2019 Pemrograman J2ME

    2/50

    Pemrograman Aplikasi Wireless dengan Java/J2MEVersi:1.0

    Disusun oleh:Puji Hartono, ST

    Copyright 2004 CSRG STMIK AMIKBANDUNG, Jl. Jakarta 28 Bandung40272. Website http://linux.stmik-bg.ac.id

  • 8/6/2019 Pemrograman J2ME

    3/50

    DAFTAR ISI

    1. Pengantar Java . 12. Java dasar .. 33. Pemrograman berorientasi objek dalam java . 6

    4. Java lanjut .. 115. I/O Stream . 146. Pengantar J2ME .. 167. Pengembangan aplikasi dengan J2ME . 188. MIDlet dasar .. 219. Event handling .. 23

    10. User interface . 2511. Pemrograman database dengan RMS 2712. Pemrograman client-server dengan socket .. 3313. Installasi aplikasi pada perangkat wireless . 4114. Penutup 4315. Daftar Pustaka .. 44

    16. Lampiran

  • 8/6/2019 Pemrograman J2ME

    4/50

    Bagian 1

    J2SE Pengantar JavaJava dasarPemrograman berorientasi objek dalam Java

    Java lanjutI/O Stream

  • 8/6/2019 Pemrograman J2ME

    5/50

    Pemrograman aplikasi wireless dengan Java/J2ME 1

    1Pengantar JAVA

    Java merupakan bahasa pemrograman general purpose, Java bisa digunakan untukpembuatan aplikasi web, database, grafis dan berbagai aplikasi lainnya seperti bahasapemrograman lainnya. Mengapa Java menjadi andalan bagi para programmer ? Selaindukungan API yang begitu lengkap, hasil program Java akan bisa dijalankan di semuaplatform selama disitu terdapat JVM (Java Virtual Machine). Kalau seorang programmermemilih Java sebagai bahasa untuk pengembangan aplikasinya, maka dia tidak perlupusing memikirkan apakah sistem operasi usernya mendukung atau tidak sehingga

    Java mempunyai slogan write once, run every where. Memang kalau hanya sekedarprogram helloWord jika ditulis dengan bahasa C akan bisa dijalankan di berbagaiplatform, akan tetapi untuk untuk program-program yang sudah menyentuh operasiI/O, komunikasi network dan berbagai hal yang spesifik terhadap platform tertentumaka kebutuhan bahasa yang cross platform menjadi penting dan Java adalahsolusinya.

    A. Keluarga Java

    Gambar 1.1 Berbagai versi Java dilihat dari target platformnya

  • 8/6/2019 Pemrograman J2ME

    6/50

    Pemrograman aplikasi wireless dengan Java/J2ME 2

    Sun Microsystem sebagai pengembang bahasa Java telah mengembangkan beberapaversi Java, seperti: J2EE (Java 2 Enterprise Edition), J2SE (Java 2 Standar Edition),

    J2ME (Java 2 Micro Edition), Java Card. J2EE dan J2SE dikembangkan untuk platformServer dan PC, J2ME dikembangkan untuk platform mobile device sedangkan Java Carduntuk platform simcard. Pada dasarnya versi-versi tersebut sama, hanya penggunaanAPI yang berbeda sesuai dengan target platform yang akan digunakan dankompatibilitas platform tersebut.

    B. Pengembangan aplikasi dengan Java

    myProgram.java

    Compiler myProgram.class

    Interpreter(JVM)

    Gambar 1.2 Alur pembuatan aplikasi dengan Java

    Dalam pembuatan aplikasi dengan bahasa Java, pertama yang dilakukan adalahmengetik program dengan editor sembarang dan kemudian menyimpannya denganekstensi .java. Setelah itu program dikompile sehingga mendapatkan class-classnya.File class inilah yang di run oleh interpreter (dalam hal ini JVM) menjadi aplikasi sepertiprogram-program yang dibuat dengan bahasa-bahasa pemrograman lainnya.

  • 8/6/2019 Pemrograman J2ME

    7/50

    Pemrograman aplikasi wireless dengan Java/J2ME 3

    2Java Dasar

    A. Kebutuhan softwareUntuk membuat program Java diperlukan Java Development Kit yang berguna untukmengkompile source kode sehingga didapatkan class-classnya. Java Development Kitbisa didownload di http://java.sun.com/

    B. Memulai membuat program

    Program Java bisa ditulis dengan sembarang editor, kode program tersebut kemudiandikompile sehingga dihasilkan file-file classnya. Class-class inilah yang akan dijalankansebagai aplikasi program kita.

    B.1. Menulis kode programPenulisan kode program java bisa dilakukan dengan editor biasa seperti Notepad,Editplus, Ultraedit dan editor-editor lainnya. Setiap program Java disimpan dalamekstensi .java. Sebagai contoh program pertama kali, salinlah kode program berikutdan simpan dalam file notHelloWorld.java

    1:2:3:4:5:6:7:8:

    public class notHelloWorld{

    public static void main(String[] args)

    {System.out.println("Not Hello World");}

    }

    Kode program diatas akan menampilkan "Not Hello World"

    B.2. Mengkompile programSetelah kode program disimpan dalam ekstensi .java, kode perlu dikompile, sintakkompilasi program Java adalah:

    javac

    Sebagai contoh kompilasi program notHelloWorld yang berada di direktori D:\javaadalah sebagai berikut

    D:\java>javac notHelloWorld.java

    Hasil kompilasi berupa file notHelloWorld.class seperti tampak pada output berikut.

    D:\java>dirVolume in drive D is DATA-20 GBVolume Serial Number is 0930-1ED9

  • 8/6/2019 Pemrograman J2ME

    8/50

    Pemrograman aplikasi wireless dengan Java/J2ME 4

    Directory of D:\java

    12/06/2003 05:24a .12/06/2003 05:24a ..12/06/2003 05:35a 125 notHelloWorld.java12/06/2003 05:39a 435 notHelloWorld.class

    2 File(s) 560 bytes2 Dir(s) 813,809,664 bytes free

    B.3. Menjalankan programAdapun sintak untuk menjalankan program Java adalah:

    java [-options] class [args...]

    Sebagai contoh untuk menjalankan file notHelloWorld.class perintahnya adalahsebagai berikut

    D:\java>java notHelloWorldNot Hello World

    B.4. Membuat dokumentasi programDalam pengembangan aplikasi dalam skala besar, seringkali sebuah aplikasi dikerjakan

    dalam tim yang terdiri dari beberapa orang. Class-class yang dibuat oleh kita mungkinsaja akan digunakan orang lain sehingga kebutuhan dokumentasi yang tersusun rapitentang class yang kita buat akan sangat penting. Dalam Java terdapat fasilitas untukmembuat dokumentasi tentang class-class yang kita buat. Keterangan-keterangantentang class, properti, metodh yang kita buat akan sangat penting dalam pembuatandokumentasi yang baik. Sintak untuk membuat dokumentasi class yang telah dibuatadalah sebagai berikut

    javadoc [options] [packagenames] [sourcefiles] [classnames] [@files]

    Sebagai contoh pembuatan dokumentasi program notHelloWorld di atas yang telahdibuat adalah sebagai berikut

    D:\java>javadoc notHelloWorld.javaLoading source file notHelloWorld.java...Constructing Javadoc information...Standard Doclet version 1.4.0

    Generating constant-values.html...Building tree for all the packages and classes...Building index for all the packages and classes...Generating overview-tree.html...Generating index-all.html...Generating deprecated-list.html...Building index for all classes...Generating allclasses-frame.html...Generating allclasses-noframe.html...Generating index.html...Generating packages.html...

    Generating notHelloWorld.html...Generating package-list...Generating help-doc.html...Generating stylesheet.css...

    Sehingga akan dihasilkan dokumentasi program dalam format HTML seperti gambarberikut

  • 8/6/2019 Pemrograman J2ME

    9/50

    Pemrograman aplikasi wireless dengan Java/J2ME 5

    Gambar 2.1. Dokumentasi Class

    B.5. Membiasakan membaca manual dokumentasi APIMembaca manual merupakan kewajiban bagi programmer, sering kita lupa atau belumtahu penggunaan sebuah fungsi/class yang kita butuhkan dalam pengembangansoftware sehingga membaca manual menjadi sebuah keharusan, bahkan kemudianmuncul istilah RTFM (Read The F*** in Manual).

    Gambar 2.2. Dokumentasi API

  • 8/6/2019 Pemrograman J2ME

    10/50

    Pemrograman aplikasi wireless dengan Java/J2ME 6

    3Pemrograman Berorientasi

    Objek dalam Java Java merupakan bahasa pemrograman yang 100% berorientasi objek sehingga untukmembuat aplikasi berbasis Java, kita harus memahami konsep dan implementasipemrograman berorientasi objek.

    A. Kelas dan ObjekDalam paradigma pemrograman berorientasi objek dikenal kelas dan objek. Kelasmerupakan blue print dari objek-objek yang akan dibuat. Analogi kelas dan objek sepertirancangan model rumah dan pembangunan rumah-rumah, adapun proses pembuatanobjek dari kelas dikenal dengan instantiasi.

    Gambar 3.1. Pembuatan objek dari kelas dengan instantiasi

    Sebagai contoh kita ambil kelas manusia. Kelas manusia mempunyai atribut : nama.Selain itu kelas manusia juga mempunyai metodh: tampilkanNama, kerja, makan.Kasus diatas diimplementasikan dalam bahasa Java sebagai berikut

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:

    public class manusia{

    public String nama;

    public manusia(String n){this.nama = n;}

    public String tampilkanNama(){return nama;}

    public void makan(){System.out.println("Nyam... nyam... nyam...");}

    public void kerja(){

    Kelas Objekinstantiasi

  • 8/6/2019 Pemrograman J2ME

    11/50

    Pemrograman aplikasi wireless dengan Java/J2ME 7

    23:24:25:

    System.out.println("Kerja...kerjaaa...");}

    }

    Adapun kode untuk menginstantiasi kelas manusia menjadi objek Andi yangmengimplementasikan metodh: tampilkanNama dan makan adalah sebagai berikut.

    1:

    2:3:4:5:6:7:8:9:

    public class andi

    { public static void main(String arg[]){manusia andi= new manusia("Andi");System.out.println("Nama= "+ andi.tampilkanNama());andi.makan();}

    }

    Hasil eksekusi terhadap class andi adalah sebagai berikut:

    D:\java>java andiNama= AndiNyam... nyam... nyam...

    B. PewarisanSalah satu kelebihan pemrograman berorientasi objek adalah penggunaan ulang kode-kode yang telah dibuat. Pewarisan adalah salah satu cara untuk menggunakan kode-kode yang telah dibuat sebelumnya.

    Sebagai contoh kelas manusia diturunkan menjadi kelas programmer.

    1:2:3:4:5:

    6:7:8:9:

    10:11:12:13:14:15:16:17:

    public class programmer extends manusia{

    public programmer(String n){

    super(n);

    }

    public void kerja(){System.out.println("TakTakKlik..");}

    public void bersantai(){System.out.println("Game over, You lose...");}

    }

    Badu adalah seorang programmer keturunan manusia, setelah dia makan lalu kerjadan terakhir dia bersantai dengan komputernya sehingga implementasi dengan kode

    javanya adalah

    1:2:3:4:5:6:7:8:9:

    public class badu{

    public static void main(String arg[]){programmer badu= new programmer("badu");System.out.println("Nama= "+ badu.tampilkanNama());badu.makan();badu.kerja();badu.bersantai();

  • 8/6/2019 Pemrograman J2ME

    12/50

    Pemrograman aplikasi wireless dengan Java/J2ME 8

    10:11:

    }}

    Sehingga class Badu jika dieksekusi akan menghasilkan

    D:\java>java baduNama= baduNyam... nyam... nyam...TakTakKlik..

    Game over, You lose...

    Setelah Objek Badu memberitahu namanya, dia makan dengan metodh warisan darikelas manusia, kemudian dia kerja dengan metodh khusus kelas programmer danterakhir dia bersantai juga dengan metodh khusus kelas programmer.

    Kelas turunan akan mewariskan atribut-atribut dan metodh-metodh parentclass nya/ baseclass , akan tetapi dia tidak mewarisi konstruktor-konstruktornyasehingga ketika andi makan maka dia makan dengan metodh dari parentclass nya(manusia).

    Akan tetapi ketika dia kerja, dia kerja dengan metodh baru yang didefinisikan khususpada kelas programmer (TakTakKlik.. bukan Kerja.kerjaaa), inilah yangdisebut dengan metodh overriding.

    C. PolymorfisneSalah satu pilar Pemrograman Berorientasi Objek yang lain adalah polymorfisme yaitukemampuan beberapa objek bertipe sama bereaksi secara berbeda terhadap pesan

    yang sama.

    Sebagai contoh kita tambah lagi turunan dari manusia yaitu kelas sopir. Kelas sopirdiimplementasikan dalam java

    1:2:3:4:5:6:7:8:9:

    10:11:12:

    public class sopir extends manusia{

    public sopir(String n){

    super(n);}

    public void kerja(){System.out.println("Ngung... Ngung... Ngung...Ciiit..");}

    }

    Dedi adalah seorang sopir keturunan manusia, untuk menginstantiasi objek dediditunjukkan dalam kode berikut.

    1:2:3:4:5:6:7:8:9:

    10:

    public class dedi{

    public static void main(String arg[]){sopir dedi= new sopir("Dedi");System.out.println("Nama= "+ dedi.tampilkanNama());dedi.makan();dedi.kerja();}

    }

  • 8/6/2019 Pemrograman J2ME

    13/50

    Pemrograman aplikasi wireless dengan Java/J2ME 9

    Kemudian Badu sang programmer dan Dedi sang sopir diperintahkan untuk bekerja,apa reaksinya?

    Untuk melihat reaksi masing-masing, perhatikan kode java berikut!

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:

    public class pekerja{

    public static void main(String args[]){manusia[] profesi= new manusia[2];profesi[0]=new programmer("Andii");profesi[1]=new sopir("Dedi");

    for (int i=0; ijava pekerjaTak.. Tak.. Klik..

    Ngung... Ngung... Ngung...Ciiit..

    Dari contoh di atas terlihat bahwa dengan pesan yang sama akan menghasilkanreaksi yang berbeda tergantung implementasi metodhnya.

    D. PengkapsulanPilar terakhir dari 3 pilar Pemrograman Berorientasi Objek adalah pengkapsulan,dimana pengembang software dapat menyembunyikan detail suatu objek.

    Hak akses public memungkinkan semua kelas mengaksesnya, hak akses protectedhanya diberikan kepada kelasnya sendiri dan turunannya, serta kelas-kelas dalam satupaket. sedangkan private hanya boleh diakses oleh kelasnya sendiri.

    E. InterfaceUntuk membuat suatu kelas dapat kita turunkan dengan pewarisan field-field danmetodh pada base classnya. Bagaimana kita membuat kelas yang menurunkan sifat daribeberapa base class? misalkan kita akan membuat kelas superman yang dia bisamembuat program layaknya programmer, dia juga ahli menggunakan senjata layaknyatentara, bahkan dia bisa terbang seperti elang (keturunan binatang)? Caranya adalahdengan pewarisan ganda. Dalam Java tidak dikenal pewarisan ganda, sehinggadigunakan interface.

    Contoh pewarisan ganda yang tidak benar dalam Java

    1:

    2:3:

    public class superman extends programmer,kambing,sapi

    {}

    Perhatikan contoh berikut:

    1:2:3:4:5:6:7:

    interface programmer {void memrogram();

    }

    interface tentara {void menembak();

    }

  • 8/6/2019 Pemrograman J2ME

    14/50

    Pemrograman aplikasi wireless dengan Java/J2ME 10

    8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:

    interface burung {void terbang();void buangKotoran();

    }

    class superman implements programmer,tentara,burung {

    public void memrogram(){};public void menembak(){};public void terbang(){};public void buangKotoran(){};}

    Kemudian kelas superman diinstantiasi menjadi objek bernama bejo, contoh kodeprogram javanya sebagai berikut:

    1:2:3:4:5:6:7:

    8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:

    public class bejo{

    public static void main(String arg[]){superman bj= new superman();

    bj.memrogram();

    {System.out.println("Implementasi memrogram ...tak..tik");}

    bj.menembak();{System.out.println("Implementasi menembak ...dor..dor");

    }

    bj.terbang();{System.out.println("Implementasi terbang......Zap....");

    }}

    }

    Dalam kode diatas bejo menentukan sendiri cara mengimplementasi beberapa metodhdari interface yang telah didefiniskan dalam kelas superman (misalkan caramemrogramnya bagaimana, cara menembaknya bagaimana dan cara terbangnya sepertiapa), selain itu bejo tidak berminat untuk mengimplementasikan metodh buangKotorandari interface burung (misalnya karena burung biasa membuang kotoran di sembarangtempat).

    Jadi interface dapat dianalogikan seperti menandatangani kontrak kerja, misalnyasebagai dosen dia wajib mengajar, membuat soal ujian dsb, akan tetapi caramengajarnya dan membuat soalnya dilakukan terserah masing-masing dosen (tidakditentukan dalam kontrak kerja)

  • 8/6/2019 Pemrograman J2ME

    15/50

    Pemrograman aplikasi wireless dengan Java/J2ME 11

    4Java Lanjut

    A. Pemaketan kelas-kelasKetika kelas-kelas yang dibuat semakin banyak dan semakin banyak, hal ini akanmembuat struktur program menjadi rumit kalau tidak dikelola dengan baik. Untuk itukelas-kelas disimpan dalam paket-paket tertentu, misalkan kelas programmerC,programmerJava, programmerPHP berada/disimpan dalam paket programmer.Sementara marinir, kopasus, paskhas berada dalam paket tentara. Keuntungan

    pengaturan program dalam nama paket-paket adalah:1. Terhindar dari konflik penamaan. Misalkan saja dalam membuat program kita

    menggunakan/mengimport kelas dari luar yang dibuat oleh programmer lain,sehingga mungkin saja dalam penamaan kelas terjadi persamaan. Denganmenunjukkan nama lengkap paket/kelasnya maka tidak akan terjadi konflikpenamaan

    2. Teratur. Misalkan paket dosen terdapat kelas dosenPBO, dosenKalkulus, dosenEtika.Paket tentara terdapat marinir, kopasus, paskhas. Dengan struktur demikian, makaakan mempermudah ketika ketika kita akan menggunakan/mengimport kelas,misalkan saja kita akan mengimport kelas kopasus, tentunya kita mencari dalampaket tentara-bukan paket dosen.

    Sebagai contoh kita akan membuat 2 paket: paket programmer dan paket tentara. Paketprogrammer terdiri dari kelas programmerC dan programmerJava. Sedangkan pakettentara terdiri dari kelas kopasus dan marinir.

    1:2:3:4:5:6:7:8:9:

    10:11:12:

    13:14:15:16:17:18:19:20:

    /* Disimpan dalam "programmer/programmerC.java" */

    package programmer;

    public class programmerC{

    public programmerC(){}

    public void kerja(){

    System.out.println("Implementasi metodh kerja Programmer C ..");}

    public void bersantai(){System.out.println("Implementasi metodh bersantai Programmer .. ");}

    }

  • 8/6/2019 Pemrograman J2ME

    16/50

    Pemrograman aplikasi wireless dengan Java/J2ME 12

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:

    /* Disimpan dalam file "programmer/programmerJava.java" */

    package programmer;

    public class programmerJava{

    public programmerJava(){}

    public void kerja(){System.out.println("Implementasi metodh kerja Programmer Java ..");}

    public void bersantai(){System.out.println("Implementasi metodh bersantai Programmer Java.. ");}

    }

    Sedangkan paket tentara terdapat kelas kopasus dan marinir.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:

    /* Disimpan dalam file "tentara/kopasus.java" */

    package tentara;

    public class kopasus{

    public kopasus(){}

    public void kerja(){System.out.println("Implementasi metodh kerja kopasus ....");}

    public void bersantai(){System.out.println("Implementasi metodh bersantai kopasus");}

    }

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:

    /* Disimpan dalam file "tentara/marinir.java" */

    package tentara;

    public class marinir{

    public marinir(){}

    public void kerja(){System.out.println("Implementasi metodh kerja marinir ..");}

    public void bersantai(){System.out.println("Implementasi metodh bersantai marinir ..");}

    }

  • 8/6/2019 Pemrograman J2ME

    17/50

    Pemrograman aplikasi wireless dengan Java/J2ME 13

    B. Mengimport kelasUntuk dapat mengimport kelas digunakan keyword import [nama paketnya]. Sebagaicontoh instantiasi kelas programmerJava dalam paket programmer menjadi objekahmed.

    1:2:

    3:4:5:6:7:8:9:

    10:11:12:

    /* Disimpan dalam file "ahmed.java" */

    import programmer.programmerC;

    class ahmed{

    public static void main(String arg[]){programmerC ahmed= new programmerC();ahmed.kerja();}

    }

    sehingga hasil eksekusinya adalah:

    Implementasi metodh kerja Programmer C ....

    Banyak sekali kelas-kelas yang telah dibuat oleh Sun Microsystem yang dapat kitagunakan, misalkan untuk membuat windows bisa digunakan/import paket awt danswing.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:

    /* Disimpan dalam file "JavaOk.java" */

    import javax.swing.*;

    public class JavaOk {

    public static void main(String[] args) {JFrame frame = new JFrame("Java?");final JLabel label = new JLabel("Java is Ok Sir");frame.getContentPane().add(label);

    frame.pack();frame.setVisible(true);

    }}

    yang akan menampilkan hasi sebagai berikut:

    Gambar 4.1. Aplikasi GUI dengan swing

  • 8/6/2019 Pemrograman J2ME

    18/50

    Pemrograman aplikasi wireless dengan Java/J2ME 14

    5I/O Stream

    A. Membaca isi file Java menyediakan paket java.io yang berisi kelas-kelas untuk input-output data.Contoh berikut digunakan untuk membaca isi file dan menampilkannya dalam layar.Pertama buatlah file data.txt kemudian isikan dengan nama-nama teman Anda.Program bacaFile akan membaca isi file data.txt perbaris dan menampilkannya ke layar.

    Gambar 5.1. Isi file data.txt

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:

    17:18:19:20:21:22:23:24:25:26:27:28:

    import java.io.*;import java.lang.*;

    class bacaFile{public static void main(String args[])

    {String namaFile="data.txt";try{String semuaTeks, isi;FileInputStream filein;BufferedReader datain;

    filein=new FileInputStream(namaFile);datain=new BufferedReader(new InputStreamReader(filein));semuaTeks="";

    while((isi=datain.readLine())!=null){System.out.println(isi);}

    filein.close();}catch(Exception e){System.out.println("Error:"+e);}}

    }

  • 8/6/2019 Pemrograman J2ME

    19/50

    Pemrograman aplikasi wireless dengan Java/J2ME 15

    Jika dieksekusi, maka program bacaFile akan menghasilkan

    D:\java>java bacaFileJokoCahyoPanduIman

    Program diatas akan membaca isi file dengan kelas FileInputStream byte demi byte padatiap baris dan kemudian ditampung dengan BufferedReader dan akhirnya dicetak kelayar.

    B. Menulis ke fileProgram kedua tentang I/O stream akan menuliskan ke file data2.txt. Kelas yangdigunakan merupakan lawan pada program membaca file yakni FileOutputStream .Kode program untuk menuliskan ke file data2.txt adalah seperti berikut.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:

    22:23:24:25:

    import java.io.*;

    class tulisFile{public static void main(String args[]){

    String namaFile="data2.txt";

    try{BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));String masukan, isi;System.out.println("Tulis input");masukan=stdin.readLine();

    FileOutputStream fout;fout=new FileOutputStream(namaFile);new PrintStream(fout).print(masukan);new PrintStream(fout).println();fout.close();}catch(Exception e){

    System.out.println("Error:"+e);}}

    }

    Program diatas jika dieksekusi akan seperti :

    D:\java>java tulisFileTulis inputBandung ...

    Hasil penulisan ke file data2.txt akan berisi string yang dimasukkan ketikamenjalankan program tulisFile

    Gambar 5.3. Isi file data2.txt

  • 8/6/2019 Pemrograman J2ME

    20/50

    Bagian 2

    J2MEPengantar J2MEPengembangan aplikasi dengan J2MEMIDlet dasar

    Event handlingUser interfacePemrograman database dengan RMSPemrograman Client Server dengan SocketInstallasi Aplikasi pada Perangkat WirelessPenutup

  • 8/6/2019 Pemrograman J2ME

    21/50

    Pemrograman aplikasi wireless dengan Java/J2ME 16

    6Pengantar J2ME

    Perkembangan pemrograman aplikasi selama ini terfokus pada pengembangan aplikasistand alone, kemudian berkembang lagi menjadi aplikasi client server serta aplikasiberbasis web. Dengan berkembangnya teknologi wireless seperti PDA dan handphonepada beberapa tahun terakhir ini, maka mulailah babak baru berupa aplikasi wireless.Dengan semboyan write once run everywhere , teknologi Java dengan portabilitas yangtinggi, memungkinkan untuk jalan di segala sistem operasi selama disitu ada JVM (JavaVirtual Machine) termasuk perangkat wireless dengan ukuran memori yang relatif kecil.

    A. J2ME vs. WAPPerbedaan utama antara J2ME dengan WAP adalah pada J2ME aplikasi terdapat diclient dan bisa juga di server (client server) tidak seperti WAP yang seluruh aplikasiterdapat di server (di client dalam WAP hanya terdapat WAP browser), sehingga dalam

    J2ME bisa dibuat aplikasi standalone tanpa tergantung koneksi ke operator selulerseperti pada WAP yang memerlukan koneksi ke operator seluler. Dalam J2ME jugaterdapat database lokal yakni RMS (Record Management System) yang berguna untukmenyimpan data.

    B. API pada J2MESeperti dijelaskan pada gambar 1.1 dibagian I, J2ME terbagi menjadi 2: CDC dan CLDC.Pada CLDC(Connected Limited Device Configuration) umumnya untuk aplikasi java padahandphone seperti produk-produk Siemens, Nokia, Motorola dll. SedangkanCDC(Connected Device Configuration) umumnya digunakan pada perangkat denganmemori setidaknya 2 Mb. Subset API pada CLDC dijelaskan pada gambar di bawah ini.

    Gambar 6.1. API pada J2ME CLDC

  • 8/6/2019 Pemrograman J2ME

    22/50

    Pemrograman aplikasi wireless dengan Java/J2ME 17

    Salah satu kelemahan CLDC yang merisaukan programmer adalah tidak adanyadukungan floating point sehingga kreatifitas programmer sangat diperlukan. Pembahasan buku ini mengacu pada J2ME configuration CLDC.

  • 8/6/2019 Pemrograman J2ME

    23/50

    Pemrograman aplikasi wireless dengan Java/J2ME 18

    7Pengembangan Aplikasi

    Dengan J2MEA. Perangkat pengembanganSelain JDK dalam pengembangan aplikasi dengan J2ME diperlukan juga softwaretambahan yakni J2ME Wireless Toolkit. Dalam Toolkit ini terdapat API J2ME danemulator beberapa perangkat wireless. Toolkit ini berfungsi untuk mengkompile danmensimulasikan aplikasi pada emulator.

    Gambar 7.1 J2ME Wireless Toolkit

    Beberapa menu fungsi utama J2ME Wireless Toolkit antara lain:File New Project , tombol ini digunakan untuk memulai membuat projectFile Open Project , tombol ini digunakan untuk membuka project yang pernahdibuatProject Build , tombol ini digunakan untuk mengkompile source kode yangterdapat di dalam direktori /apps/nama_project/src/Project Run , tombol ini digunakan untuk menjalankan aplikasi pada emulatorsesuai pilihanProject Package , menu ini untuk membundel aplikasi yang telah dibuat. Menu inidigunakan terakhir kali setelah semua tahapan pengembangan selesaiProject Setting , tombol ini digunakan untuk menyeting beberapa parameteraplikasi yang dibuat

  • 8/6/2019 Pemrograman J2ME

    24/50

    Pemrograman aplikasi wireless dengan Java/J2ME 19

    Sedangkan keterangan direktori-direktori yang ada didalam J2ME Wireless Toolkitadalah sebagai berikut:

    File/Direktori Keterangan

    appdb\ Direktori berisi file-file database, seperti file-file RMS file

    apps\ Direktori yang berisi demo aplikasi dan aplikasi-aplikasi yangdibuat dengan KToolbar

    bin\ Batch file dan file-file executable tool

    docs\ Direktori yang berisi dokumtasi API

    lib\midpapi.zip Arsip kelas-kelas API CLDC dan MIDP. File-file ini digunakanpada proses kompilasi dan preverification

    sessions\ Direktori default yang berisi profiling, monitoring memori dansession file pada monitoring network wktlib\devices\ Direktori yang berisi file-file properti device-device yang

    digunakan pada emulator

    B. Tahapan pengembanganPengembangan aplikasi dengan J2ME memerlukan tahapan-tahapan seperti yangdijelaskan dalam gambar dibawah ini

    Gambar 7.2 Tahapan pengembangan aplikasi dengan J2ME

    Setelah semua fungsional aplikasi sesuai dengan yang direncanakan, aplikasi perludisimulasikan ke beberapa emulator sesuai dengan target usernya. Secara umum semuaperangkat wireless yang telah mensupport Java(J2ME) maka aplikasi yang kita buatakan bisa dijalankan di perangkat tersebut, namun terkadang untuk tiap devais target

  • 8/6/2019 Pemrograman J2ME

    25/50

    Pemrograman aplikasi wireless dengan Java/J2ME 20

    mempunyai kekhususan seperti lebar dan tinggi layar/display, sehingga mungkin kitaperlu membuat beberapa versi distribusi aplikasi kita yang disesuaikan dengan devaistargetnya.

    Gambar 7.3 Aplikasi J2ME yang dijalankan pada emulator

  • 8/6/2019 Pemrograman J2ME

    26/50

    Pemrograman aplikasi wireless dengan Java/J2ME 21

    8MIDlet Dasar

    A. Siklus hidup sebuah MIDletMIDlet (Mobile Information Device Applet) mempunyai 3 kemungkinan kondisi: pause,active dan destroyed. Ketika MIDlet mulai dijalankan, maka MIDlet berada pada kondisiaktif. Jika terdapat interupsi seperti adanya panggilan pada ponsel maka MIDlet beradapada kondisi pause. Dan ketika selesai menjalankan MIDlet maka diperlukan metodhuntuk membunuh MIDlet dengan destroyApp(). Ketiga kondisi ini digambarkan padadiagram di bawah ini:

    Gambar 8.1 Siklus hidup sebuah MIDlet

    B. MIDlet sederhanaUntuk memulai belajar J2ME ini kita ambil contoh program NotHelloWorld yang akanmenampilkan tulisan Not Hello World melalui TextBox. Pertama yang perlu dilakukanadalah membuat project baru dan memberi nama NotHelloWorld, kemudian salinlahkode berikut dan simpan ke dalam file NotHelloWorld.java di dalam direktori/apps/NotHelloWorld/src/.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:

    import javax.microedition.MIDlet.*;import javax.microedition.lcdui.*;

    public class NotHelloWorld extends MIDlet {

    private Display display;

    public NotHelloWorld(){display = Display.getDisplay(this);}

    public void startApp(){

  • 8/6/2019 Pemrograman J2ME

    27/50

    Pemrograman aplikasi wireless dengan Java/J2ME 22

    15:16:17:18:19:20:21:22:23:24:25:26:

    TextBox t = new TextBox("Not","Not Hello World",256,0);display.setCurrent(t);}

    public void pauseApp(){}

    public void destroyApp(boolean unconditional){}

    }

    Contoh kode diatas akan menampilkan sebuah TextBoox yang diberi label Not dandidalamnya terdapat kata Not Hello World. Ketika program dipanggil maka state MIDletberada pada active dengan memanggil metodh startApp() dan pada state inilah sebuah

    TextBoox dibuat (instantiasi) untuk kemudian menampilkan string Not Hello World.Setiap MIDlet harus mempunyai minimal 3 metodh: startApp(), pauseApp() dandestroyApp(boolean unconditional). Output program diatas seperti pada gambar dibawah ini

    Gambar 8.2. MIDlet Dasar, NotHelloWorld

  • 8/6/2019 Pemrograman J2ME

    28/50

    Pemrograman aplikasi wireless dengan Java/J2ME 23

    9Event Handling

    Event berguna untuk menangani interaksi user dengan program, misalnya user memilihsebuah menu dalam aplikasi MIDlet.Untuk menangani event perlumengimplementasikan interface CommandListener dan atau ItemListener.CommandListener berfungsi untuk menangani jika user memilih Command tertentusedangkan ItemListener berfungsi untuk menangani jika user mengubah nilai sepertimisalnya mengubah pilihan pada ChoiceGroup.

    Untuk memberikan gambaran sebuah event bekerja, perhatikan contoh berikut.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:

    import javax.microedition.MIDlet.*;import javax.microedition.lcdui.*;

    public class NotHelloWorld2 extends MIDlet implements CommandListener{

    private Command cmdExit;private Display display;

    public NotHelloWorld2(){display = Display.getDisplay(this);cmdExit = new Command("Exit", Command.SCREEN,2);}

    public void startApp(){TextBox t = new TextBox("Not ","Not Hello World",256,0);t.addCommand(cmdExit);t.setCommandListener(this);

    display.setCurrent(t);}

    public void pauseApp(){}

    public void destroyApp(boolean unconditional){}

    public void commandAction(Command cmd,Displayable disp){if(cmd==cmdExit)

    {destroyApp(false);notifyDestroyed();}

    }}

  • 8/6/2019 Pemrograman J2ME

    29/50

    Pemrograman aplikasi wireless dengan Java/J2ME 24

    Pada contoh kedua ini, kita tambahkan sebuah Command untuk keluar dari aplikasi yang telah kita buat pada contoh 1. Ketika program pertama kali dipanggil, maka stateberada pada Aktif , disini sebuah TextBox dan Command dibuat. Kemudian programmenunggu respon dari user dengan mengimplementasikan CommandListener . Ketikauser menekan Command cmdExit (baris 32-39), maka program memanggilmetodh(destroyApp) untuk membunuh MIDlet.

    Gambar 9.1. Penggunaan event

  • 8/6/2019 Pemrograman J2ME

    30/50

    Pemrograman aplikasi wireless dengan Java/J2ME 25

    10User Interface

    Dalam sebuah aplikasi seringkail membutuhkan user interface seperti misalnyadibutuhkan input pada aplikasi yang akan dibangun. Contoh di bawah inimendemonstrasikan input dengan sebuah TextField dan output dengan StringItem.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:47:48:

    import javax.microedition.MIDlet.*;import javax.microedition.lcdui.*;

    public class converter extends MIDlet implements CommandListener{

    private Display display;private Command cmdExit;private Command cmdConvert;private Command cmdOK;private Form form1;private Form form2;private TextField input;private StringItem hasil;

    public void startApp(){display = Display.getDisplay(this);cmdConvert = new Command("Convert",Command.SCREEN,1);cmdExit = new Command("Exit",Command.SCREEN,1);cmdOK = new Command("OK",Command.SCREEN,1);

    form1 = new Form("Converter");input = new TextField("Input:",null,256,TextField.ANY);

    form1.addCommand(cmdConvert);form1.addCommand(cmdExit);form1.setCommandListener(this);form1.append(input);

    form2 = new Form("Hasil");hasil = new StringItem(null,null);form2.append(hasil);form2.addCommand(cmdOK);form2.setCommandListener(this);

    display.setCurrent(form1);}

    public void pauseApp(){}

    public void destroyApp(boolean unconditional){}

    public void commandAction(Command cmd,Displayable disp){

  • 8/6/2019 Pemrograman J2ME

    31/50

  • 8/6/2019 Pemrograman J2ME

    32/50

  • 8/6/2019 Pemrograman J2ME

    33/50

    Pemrograman aplikasi wireless dengan Java/J2ME 28

    23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:

    display = Display.getDisplay(this);bukaDb();}

    public void tambahData(){formTambahKota = new Form("Tambah Kota ");tKota = new TextField("",null,30,TextField.ANY);

    formTambahKota.append(tKota);formTambahKota.addCommand(cmdAdd);formTambahKota.addCommand(cmdExit);formTambahKota.setCommandListener(this);display.setCurrent(formTambahKota);}

    public void tambahkan(){try{

    String kota = tKota.getString();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();DataOutputStream dos = new DataOutputStream(baos);dos.writeUTF(tKota.getString());

    byte[] b = baos.toByteArray();myDb.addRecord(b, 0, b.length);display.setCurrent(formTambahKota);}

    catch(IOException e){}

    catch(RecordStoreException e){}

    }

    public void bukaDb(){try{

    myDb = RecordStore.openRecordStore("kota",true);tambahData();}

    catch(RecordStoreNotFoundException e){}catch(RecordStoreException e){}

    }

    public void Exit(){

    try{

    myDb.closeRecordStore();this.destroyApp(true);}

    catch(RecordStoreNotOpenException e){}

    catch(RecordStoreException e){}

  • 8/6/2019 Pemrograman J2ME

    34/50

    Pemrograman aplikasi wireless dengan Java/J2ME 29

    93:94:95:96:97:98:99:

    100:101:102:103:104:105:106:107:108:109:110:111:112:113:114:115:116:117:118:119:120:121:

    catch(NullPointerException e){

    this.destroyApp(true);}

    }

    public void commandAction(Command c, Displayable d){

    String lbl = c.getLabel();if(lbl.equals("Exit")){Exit();}

    else if(lbl.equals("Tambahkan")){tambahkan();}

    }

    public void pauseApp(){}

    public void destroyApp(boolean unconditional){notifyDestroyed();}

    }

    Dalam program penambahan data diatas, awalnya program memanggil bukaDb() yangdisitu terdapat inisialisasi database kota

    myDb = RecordStore.openRecordStore("kota",true);

    Jika database kota belum ada, maka RMS akan membuatkan database kota.Kemudian program memanggil tambahData() sebagai media input berupa textField,sehingga program akan menuju pengisian nama kota seperti pada gambar berikut.

    Gambar 11.2. Form penambahan kota

    Ketika user menekan Command Tambahkan(cmdAdd), maka proses penambahan data

    dilakukan dengan stream.String kota = tKota.getString();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();DataOutputStream dos = new DataOutputStream(baos);dos.writeUTF(tKota.getString());

    byte[] b = baos.toByteArray();myDb.addRecord(b, 0, b.length);

  • 8/6/2019 Pemrograman J2ME

    35/50

    Pemrograman aplikasi wireless dengan Java/J2ME 30

    Untuk menampilkan data, kita tambahkan program untuk menambahkan data. Untukmempermudah, kedua MIDlet ini digabung dalam satu project dengan menambahkanMIDlet pada setting projectnya.

    Gambar 11.3. Menambahkan MIDlet dalam project

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:

    import javax.microedition.rms.*;import java.io.*;import javax.microedition.MIDlet.*;import javax.microedition.lcdui.*;

    public class tampilData extends MIDletimplements CommandListener{

    private Display display;private Command cmdSelect = new Command("Select",Command.EXIT,1);private Command cmdExit = new Command("Exit",Command.EXIT,1);

    private Form formListKota;private TextField t2;private RecordStore rmsDbKota;

    private static class Record{String kota;}

    public tampilData(){}

    public void startApp(){display = Display.getDisplay(this);bukaDbTampil();}

    public void tampilkanKota(){try{

    formListKota = new Form("Kota");ChoiceGroup ChoiceGrp = new ChoiceGroup("",Choice.EXCLUSIVE);formListKota.addCommand(cmdExit);formListKota.addCommand(cmdSelect);formListKota.setCommandListener(this);formListKota.append(ChoiceGrp);

    byte[] recData = new byte[150];ByteArrayInputStream bais = new ByteArrayInputStream(recData);DataInputStream dis = new DataInputStream(bais);

  • 8/6/2019 Pemrograman J2ME

    36/50

    Pemrograman aplikasi wireless dengan Java/J2ME 31

    45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99:

    100:101:102:103:104:105:106:107:108:109:110:111:112:113:114:

    RecordEnumeration enum = rmsDbKota.enumerateRecords(null,null, false);Record r=new Record();

    while(enum.hasNextElement()){

    int recId = enum.nextRecordId();

    bais = new ByteArrayInputStream(rmsDbKota.getRecord(recId));dis = new DataInputStream(bais);r.kota = dis.readUTF();

    ChoiceGrp.append(r.kota,null);}

    display.setCurrent(formListKota);}catch(IOException e)

    {}

    catch(RecordStoreNotOpenException e){}

    catch(RecordStoreException e){}

    }

    public void Kembali(){display.setCurrent(formListKota);}

    public void bukaDbTampil(){try{

    rmsDbKota = RecordStore.openRecordStore("kota",true);tampilkanKota();

    }

    catch(RecordStoreNotFoundException e){}

    catch(RecordStoreException e){}

    }

    public void keluar(){

    try{rmsDbKota.closeRecordStore();this.destroyApp(true);

    }catch(RecordStoreNotOpenException e)

    {}

    catch(RecordStoreException e){}

    catch(NullPointerException e){this.destroyApp(true);}

    }

    public void commandAction(Command c, Displayable d){

    String lbl = c.getLabel();if(lbl.equals("Exit"))

  • 8/6/2019 Pemrograman J2ME

    37/50

    Pemrograman aplikasi wireless dengan Java/J2ME 32

    115:116:117:118:119:120:121:122:123:124:125:126:127:128:129:

    {keluar();

    }else if (lbl.equals("Select"))

    {}

    }public void pauseApp()

    {}

    public void destroyApp(boolean unconditional){

    notifyDestroyed();}

    }

    Program diatas akan menampilkan semua data dengan stream dan menampilkannyadalam choice group.

    bais = new ByteArrayInputStream(rmsDbKota.getRecord(recId));dis = new DataInputStream(bais);r.kota = dis.readUTF();

    ChoiceGrp.append(r.kota,null);

    Output program diatas seperti pada gambar di bawah ini. Jika user menekan CommandExit maka program memannggil metodh untuk membunuh MIDlet

    Gambar 11.4. Menampilkan data

  • 8/6/2019 Pemrograman J2ME

    38/50

    Pemrograman aplikasi wireless dengan Java/J2ME 33

    12Pemrograman Client Server

    dengan Socket Tiba saatnya kita masuk ke pembahasan inti, pemrograman client server. Perangkat wireless dapat berkomunikasi dengan perangkat lainya apakah PC atau antar perangkat wireless dapat dengan berbagai macam, seperti dengan infra merah, bluetooth atau

    koneksi GPRS (General Packet Radio Service). Koneksitas antara server denganperangkat wireless pada aplikasi yang akan kita buat dengan menggunakan GPRSdiilustrasikan pada gambar berikut di bawah ini.

    Server

    Internet

    Operator Seluler

    Gateway

    Perangkat Wireless Gambar 12.1. Koneksi server dengan perangkat wireless dengan GPRS

    Aplikasi yang akan kita buat berupa program untuk melihat status pengiriman padasebuah perusahaan yang menerima delivery order. Program ditanam di server dan diclient. Pada server digunakan MySQL sebagai databasenya dan JDBC sebagaikoneksitasnya dengan aplikasi yang kita buat.

    A. Sisi serverPada sisi server kita membutuhkan database dalam hal ini kita gunakan MySQL.Database dan tabel yang kita pakai diberi nama status. Contoh query untukmenampilkan seluruh data pada tabel status adalah sebagai berikut.

  • 8/6/2019 Pemrograman J2ME

    39/50

    Pemrograman aplikasi wireless dengan Java/J2ME 34

    mysql> select * from status;+-------+----------------+----------+--------------------+| id | tanggal_datang | status | tanggal_pengiriman |+-------+----------------+----------+--------------------+| 00001 | 2003-12-07 | terkirim | 2003-12-10 || 00002 | 2003-12-07 | pending | 2003-12-11 || 00003 | 2004-01-07 | terkirim | 2004-01-09 || 00004 | 2004-01-08 | pending | 2004-01-09 || 00005 | 2004-01-09 | pending | 2004-01-11 |+-------+----------------+----------+--------------------+5 rows in set (0.00 sec)

    Program di sisi server menggunakan socket untuk membuat program yang siapmenerima koneksi dari client.

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:

    23:24:25:26:27:28:29:30:31:32:33:34:35:36:

    37:38:39:40:41:42:43:44:45:46:47:

    import java.io.*;import java.net.*;import java.sql.*;

    public class OrderStatusServer {

    private int port =2004;private ServerSocket serverSocket;

    static final String dbURL="jdbc:mysql://localhost/status?"+"user=root&password=";

    public OrderStatusServer()throws ClassNotFoundException{Class.forName("org.gjt.mm.mysql.Driver");}

    public void acceptConnection(){

    try{serverSocket = new ServerSocket(2004);}

    catch(IOException e){System.err.println("Gagal menginisialisasi Socket Server");e.printStackTrace();System.exit(0);}

    while(true){try

    {

    Socket newConnection = serverSocket.accept();System.out.println("koneksi diterima");ServerThread st = new ServerThread(newConnection);new Thread(st).start();}

    catch(IOException ioe){System.err.println("gagal menerima koneksi");}

    }}

  • 8/6/2019 Pemrograman J2ME

    40/50

    Pemrograman aplikasi wireless dengan Java/J2ME 35

    48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:

    71:72:73:74:75:76:77:78:79:80:81:82:83:84:

    85:86:87:88:89:90:91:92:93:94:95:96:97:98:99:

    100:101:102:103:104:105:106:107:108:109:110:

    public static void main(String args[]){OrderStatusServer server =null;try

    {server =new OrderStatusServer();}

    catch(ClassNotFoundException e)

    {System.out.println("Gagal meload driver JDBC");e.printStackTrace();System.exit(1);}

    server.acceptConnection();}

    class ServerThread implements Runnable{private Socket socket;private DataInputStream datain;

    private DataOutputStream dataout;

    public ServerThread(Socket socket){this.socket = socket;}

    public void run(){try{datain= new DataInputStream(new BufferedInputStream(socket.getInputStream()));dataout= new DataOutputStream

    (new BufferedOutputStream(socket.getOutputStream()));}catch(IOException e){return;}

    byte[] ba =new byte[6];boolean conversationActive=true;while(conversationActive){String orderNumber=null;try

    {datain.read(ba,0,6);orderNumber=new String(ba);if(orderNumber.toUpperCase().charAt(0)=='C')

    {conversationActive=false;}

    else{System.out.println("order Number="+orderNumber);String status=getStatus(orderNumber);System.out.println("status:"+status);

  • 8/6/2019 Pemrograman J2ME

    41/50

    Pemrograman aplikasi wireless dengan Java/J2ME 36

    111:112:113:114:115:116:117:118:119:120:121:122:123:124:125:126:127:128:129:130:131:132:133:

    134:135:136:137:138:139:140:141:142:143:144:145:146:147:

    148:149:150:151:152:153:154:155:156:157:158:159:160:161:162:163:164:165:166:167:168:169:170:171:

    dataout.write(status.getBytes(),0,status.length());dataout.write("\n".getBytes(),0,1);dataout.flush();}

    }catch(IOException ioe){conversationActive=false;}

    }try{System.out.println("closing socket");datain.close();dataout.close();socket.close();}catch(IOException e){}

    }

    private String getStatus(String orderNumber)

    {String status="Not on file";Connection conn=null;try

    {conn=DriverManager.getConnection(dbURL);Statement stmt=conn.createStatement();String query=

    "SELECT status from status where id="+orderNumber;ResultSet rs =stmt.executeQuery(query);if(rs.next())

    {status=rs.getString(1);}

    }catch(SQLException e){status="server error";}

    finally{if (conn!= null)

    {try

    {conn.close();}

    catch (SQLException e){}

    }}return status;

    }}}

  • 8/6/2019 Pemrograman J2ME

    42/50

    Pemrograman aplikasi wireless dengan Java/J2ME 37

    Setelah dikompile dan dieksekusi, ceklah apakah program di server sudah siapmenerima koneksi, perhatikan contoh output netstat berikut pada sisi server!

    C:\>netstat /na

    Active Connections

    Proto Local Address Foreign Address StateTCP 0.0.0.0:21 0.0.0.0:0 LISTENINGTCP 0.0.0.0:42 0.0.0.0:0 LISTENINGTCP 0.0.0.0:80 0.0.0.0:0 LISTENINGTCP 0.0.0.0:2004 0.0.0.0:0 LISTENINGTCP 0.0.0.0:3306 0.0.0.0:0 LISTENING

    Di sisi server berfungsi:Membuka port untuk menerima koneksiMenerima koneksi dari clientMembaca nomor orderDengan JDBC mengeksekusi perintah SQL untuk menampilkan status orderMengirim hasilnya ke client

    B. Sisi clientDi sisi client dibuat program untuk mengakses server, kode program sebagai berikut

    1:2:3:4:5:6:7:8:9:

    10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:

    import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

    import javax.microedition.io.*;import java.io.*;

    public class OrderStatusClient extends MIDlet implements CommandListener{

    Display display;private boolean commandAvailable;private byte[] xmit;CommandThread commandThread;

    List menu;Form inputForm;Form outputForm;TextField orderNumber;StringItem orderStatus;

    Command cmdBack;Command cmdExit;Command cmdOK;

    private static final String URL="socket://127.0.0.1:2004";

    StreamConnection conn= null;InputStream is = null;OutputStream os = null;

    public void startApp(){display = Display.getDisplay(this);inputForm=new Form ("Order Status");orderNumber =new TextField("Order=", null,6,TextField.NUMERIC);inputForm.append(orderNumber);cmdOK= new Command("OK", Command.SCREEN,1);

  • 8/6/2019 Pemrograman J2ME

    43/50

    Pemrograman aplikasi wireless dengan Java/J2ME 38

    41:42:43:44:45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99:

    100:101:102:103:104:105:106:107:108:109:110:

    cmdExit=new Command("Exit", Command.EXIT,1);inputForm.addCommand(cmdOK);inputForm.addCommand(cmdExit);inputForm.setCommandListener(this);

    outputForm=new Form("Order Status");orderStatus=new StringItem(null,null);outputForm.append(orderStatus);cmdBack=new Command("Back", Command.BACK,1);outputForm.addCommand(cmdBack);outputForm.addCommand(cmdExit);outputForm.setCommandListener(this);

    try {

    conn=(StreamConnection)Connector.open(URL,Connector.READ_WRITE,true);os=conn.openOutputStream();is=conn.openInputStream();}

    catch (Exception e){destroyApp(false);

    notifyDestroyed();}

    commandAvailable =false;commandThread=new CommandThread(this);commandThread.start();

    display.setCurrent(inputForm);}

    public void pauseApp(){}

    public void destroyApp(boolean unconditional){try{os.write("Q".getBytes());conn.close();}

    catch (IOException e){}

    }

    public void commandAction(Command cmd, Displayable d) {if(cmd==cmdExit){

    destroyApp(false);notifyDestroyed();

    }

    else if(cmd==cmdBack){orderNumber.setString(null);display.setCurrent(inputForm);

    }

    else if (cmd==cmdOK)synchronized (this){xmit=orderNumber.getString().getBytes();commandAvailable =true;notify();

    }

  • 8/6/2019 Pemrograman J2ME

    44/50

    Pemrograman aplikasi wireless dengan Java/J2ME 39

    111:112:113:114:115:116:117:118:119:120:121:122:123:124:125:126:127:128:129:130:131:132:133:134:135:136:137:138:139:140:141:142:143:144:145:146:147:148:149:150:151:152:153:154:155:156:157:158:159:160:161:162:163:164:165:166:167:168:

    }

    class CommandThread extends Thread{

    MIDlet parent;boolean exit=false;

    public CommandThread(MIDlet parent){this.parent =parent;

    }

    public void run(){

    while(true) {synchronized (parent){

    while(!commandAvailable){try{

    parent.wait();}catch (InterruptedException e){

    }}commandAvailable =false;

    }getStatus();}

    }

    public void getStatus() {try

    {os.write(xmit);os.flush();

    int ch;StringBuffer sb=new StringBuffer();

    while ((ch =is.read())!=-1) {sb.append((char)ch);if((char)ch =='\n') {break;}

    }

    orderStatus.setText(sb.toString());display.setCurrent(outputForm);}catch(Exception e) {}

    }}}

    Pada client digunakan connector.open() untuk membuat StreamConnection. Untukkomunikasi 2 arah digunakan getInputStream dan getOutputStream.

    Setelah dikompile dan dieksekusi maka pada sisi client akan tampil seperti sebagaiberikut

  • 8/6/2019 Pemrograman J2ME

    45/50

    Pemrograman aplikasi wireless dengan Java/J2ME 40

    Gambar 12.2. Query status order Gambar 12.3. Hasil query status order

    Dan di sisi server akan tampil seperti sebagai berikut

    D:\java>java OrderStatusServerkoneksi diterimaorder Number=00001status:terkirimorder Number=00002status:pending

  • 8/6/2019 Pemrograman J2ME

    46/50

    Pemrograman aplikasi wireless dengan Java/J2ME 41

    13Installasi Aplikasi pada

    Perangkat WirelessSetelah aplikasi yang kita buat dapat berjalan dengan baik sesuai dengan yang kitainginkan, maka pada tahap akhir adalah menginstall aplikasi yang telah dibuat padaperangkat wireless.

    A. Pembundelan aplikasiSebelum aplikasi diinstall ke perangkat wireless, file-file yang terkait dengan aplikasiselain file classnnya seperti file gambar, data dan file-file pendukung lainnya perludibundel dalam 1 file JAR. Dalam J2ME Toolkit sudah terdapat fasilitas untukmembundel aplikasi yang kita buat yaitu pada menu Project Package CreatePackage

    Gambar 13.1. Pembundelan aplikasi

    Hasil pembundelan aplikasi ini berupa file JAR dan JAD, file JAR merupakan aplikasi yang kita buat sedangkan file JAD merupakan file yang berisi informasi aplikasi yangkita buat. Kedua file ini yang akan diinstall ke dalam perangkat wireless.

    B. Installasi aplikasiAda 2 teknik installasi pada perangkat wireless yakni: OTA(Over The Air) dan Installasilangsung.

    B.1. OTA (Over The Air)

  • 8/6/2019 Pemrograman J2ME

    47/50

    Pemrograman aplikasi wireless dengan Java/J2ME 42

    Pada OTA file JAD dan JAR disimpan di web server yang terhubung ke internet (denganIP public tentunya). Pada web server perlu ditambahkan agar mendukung file JAD dan

    JAR yaitu pada konfigurasi file mime.types .

    Setelah file JAD dan JAR disimpan dalam web server, akseslah alamat url file JADnyasehingga perangkat wireless yang dalam keadaan terkoneksi mendownload file JARnya.

    B.2. Installasi langsung dari PCSetiap vendor biasanya membuat program untuk transfer data antara PC denganperangkat wireless. Media transmisi tergantung fasilitas yang disupport oleh produktersebut seperti kabel data, infra merah, bluetooth.

    Sebagi contoh installasi langsung pada ponsel Siemens dengan media kabel datamemerlukan software DES(Data Exchange Software). Dengan software ini maka drivehandhone akan terlihat pada Windows Explorer.

    Gambar 13.2. Drive perangkat wireless dalam Windows Explorer

    Untuk menginstall aplikasi J2ME dengan metode ini hanya dengan mengkopikan file JAR dan JAD ke dalam direktori tempat program Java (dalam hal ini direktori/java/jam/direktori aplikasi kita.

  • 8/6/2019 Pemrograman J2ME

    48/50

    Pemrograman aplikasi wireless dengan Java/J2ME 43

    14Penutup

    Untuk bisa menguasai pemrograman pada perangkat wireless tentunya tidak hanyamengandalkan buku ini. Buku ini sengaja disusun secara sederhana yang mencakupgaris-garis besarnya saja. Untuk lebih lengkapnya Anda harus membuka dokumentasiAPI dari J2ME dan API tambahan vendor sesuai dengan perangkat wirelessnya.

    Selain itu Anda juga perlu membaca manual tentang teknik installasi sesuai vendor jikaAnda ingin menggunakan teknik installasi langsung dari PC (bukan OTA).

    Untuk mempermudah belajar Anda bisa mengikuti berbagai milis serta aktif membuka-buka arsip forum diskusi tentang aplikasi wireless.

  • 8/6/2019 Pemrograman J2ME

    49/50

    Pemrograman aplikasi wireless dengan Java/J2ME 44

    DAFTAR PUSTAKA

    1. Tremblet, Paul. Wireless Java with J2ME, McGraw-Hill/Osborne2. Raka, Cokorda. Trik Pemrograman Java untuk Jaringan dan Internet, Elex Media

    Computindo3. Hartono, Puji. Modul Praktikum Pemrograman Berorientasi Objek, Laboratorium

    Komputer STMIK-AMIKBANDUNG

    4. Wicaksono, Ady. Pemrograman Aplikasi Wireless dengan Java, Elex MediaComputindo

    5. Sanjaya, Ridwan. Pemrograman di Linux dengan Java, Elex Media Computindo

  • 8/6/2019 Pemrograman J2ME

    50/50

    Lampiran

    A. Seting PATH Agar program-program di direktori \bin\ bisa dieksekusi dari sembarang direktori, makaperlu di set PATHnya

    Contoh:

    Direktori \bin terletak di C:\java\j2se\bin maka seting pathnya

    SET PATH=%PATH%;C:\Java\j2se\bin

    B. Seting CLASSPATH Agar class-class dapat menemukan class-class yang diimport-kan, maka perlu disetCLASSPATH nya.

    Contoh:

    Direktori \lib terletak di C:\java\j2se\lib maka seting classpathnya

    SET CLASSPATH=C:\Java\j2se\lib;%CLASSPATH%

    C. Seting JDBC Agar class-class jdbc dapat diakses maka perlu ditambahkan seting CLASSPATH nya.

    Contoh:

    Direktori \jdbc terletak di C:\java\jdbc maka seting classpathnya

    SET CLASSPATH=C:\Java\jdbc\;%CLASSPATH%