J2ME dirancang untuk menjalankan program Java pada perangkat seluler dan PDA dengan memori terbatas. J2ME terdiri dari Java Virtual Machine, API Java, dan alat pengembangan. J2ME dibagi menjadi konfigurasi dan profil, di mana konfigurasi menyediakan library standar dan profil menyediakan fitur spesifik perangkat. Contoh program MIDlet sederhana memperkenalkan penggunaan TextBox dan Ticker.
1. J2ME
Java 2 Micro Edition
J2ME dirancang untuk dapat menjalankan program Java pada perangkat-perangkat
semacam handphone dan PDA, yang memiliki karakteristik yang berbeda dengan sebuah
komputer biasa, misalnya kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri
atas komponen-komponen sebagai berikut :
Java Virtual Machine (JVM)
Komponen ini untuk menjalankan program program Java pada emulator atau handled
devices.
Java API (Application Programming Interface)
Komponen ini merupakan kumpulan librari untuk menjalankan dan mengembangkan
program Java pada handled devices.
Tools lain untuk pengembangan aplikasi Java semacam emulator Java Phone, emulator
Motorolla.
Dalam J2ME dibagi menjadi dua bagian yang dikenal dengan istilah configuration
dan profile.
J2ME Configuration
J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime. Oleh karena
setiap handled devices memiliki fitur-fitur yang berbeda-beda, J2ME Configuration ini
dirancang yakni menyediakan librari standar yang mengimplementasikan fitur standar dari
sebuah handled devices. Mengapa perlu J2ME Configuration bisa dikatakan merupakan JRE
pada handled devices. Lingkungan kerja yang dimaksud meliputi Java Virtual Machine yang
digunakan untuk menjalankan program Java.
Ada dua kategori J2ME Configuration saat ini, yaitu :
CLDC (Connected Limited Device Configuration)
Kategori ini umumnya digunakan untuk aplikasi Java pada handphone semacam Nokia,
Samsung Java Phone, Motorola i85s, PDA (Personal Digital Assistant) semacam PALM,
Pocket PC. Umumnya perangkat-perangkat tersebut hanya memiliki memori berukuran
160-512 KiloBytes.
2. CDC (Connected Device Configuration)
Kategori ini umumnya digunakan untuk aplikasi Java pada perangkat-perangkat handled
devices dengan ukuran memori paling tidak 2 Megabytes. Contohnya adalah internet TV,
Nokia Communicator dan car television atau TV pada mobil.
Perbedaan antara CLDC dan CDC adalah sebagai berikut :
CDLC CDC
Mengimplementasikan subset dari J2SE Mengimplementasikan seluruh fitur pada
J2SE
JVM yang digunakan dikenal dengan nama
KVM
JM yang digunakan dikenal dengan nama
CVM
Digunakan pada perangkat handled dengan
ukuran memori terbatas (160-512 KiloBytes)
Digunakan pada perangkat handled dengan
ukuran memori minimal 2 Mbytes
Processor 16 bit atau 32 bit Processor : 32 bit
J2ME Profile
Jika J2ME Configuration menyediakan librari-librari Java untuk implementasi fitur-
fitur standar dari sebuah handled devices, J2ME Profile menyediakan implementasi
implementasi tambahan yang sangat spesifik dari sebuah handled devices. Kemampuan
standart itulah yang diimplementasikan oleh J2ME Configuration, sedangkan kemampuan
fitur lain sangat bergantung pada jenis perangkat handled yang digunakan akan
diimplementasikan oleh J2ME Profile.
Ada lima kategori J2ME Profile saat ini, yaitu :
Mobile Information Device Profile (MIDP)
Foundation Profile (FP)
Personal Profile
RMI Profile
Personal Digital Assitance Profile
MIDP menyediakan librari-librari Java untuk implementasi dasar antarmuka (GUI),
implementasi jaringan, database dan timer. MIDP dirancang khususnya untuk wireless
phone dan pager. Buku ini hanya akan membahas pengembangan aplikasi wireless
dengan MIDP saja yang bekerja pada CLDC.
3. APLIKASI MIDLET
Midlet HelloWord
Membuat sebuah project dengan nama HelloWorld. Kemudian buat sebuah file Java
bernama HelloWorld.java yang berisi listing program sebagai berikut:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet {
private Display display ;
private TextBox t ;
public HelloWorld(){
display = Display.getDisplay(this) ;
t = new TextBox"My First MIDlet","HelloWorld",256,0;
display.setCurrent(t);
}
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
Simpan file diatas pada direktori /src. Selanjutnya lakukan Build. Dari MIDlet HelloWorld :
Program Midlet mengimport paket javax.microedition.midlet dan
javax.microedition.lcdui. Paket javax.microedition.midlet
mendefinisikan MIDP dan paket javax.microedition.lcdui menyediakan
fungsi-fungsi untuk memanipulasi antarmuka GUI pada handled.
Setiap program Midlet harus merupakan turunan dari class Midlet yang
didefinisikan pada paket javax.microedition.midlet. Hal ini mirip dengan
Applet yaitu setiap applet Java haruslah turunan dari class Applet atau JApplet.
MIDlet haruslah mengimplementasikan fungsi-fungsi abstract pada class MIDlet,
minimal 3 fungsi berikut :
1. public void startApp()
2. public void pauseApp()
4. 3. public void destroyApp(boolean unconditional)
Setiap program MIDlet tidak boleh memiliki fungsi public static void
main(String args[]) selayaknya aplikasi Java non-Applet.
Menambahkan Ticker pada HelloWord
Kita akan menambahkan sebuah ticker atau sejenis tulisan yang berjalan pada MIDlet
HelloWorld yang baru saja kita buat.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld2 extends MIDlet {
private Display display ;
private TextBox t ;
private Ticker tick ;
public HelloWorld2(){
5. display = Display.getDisplay(this) ;
t = new TextBox ("My First
MIDlet","HelloWorld",256,0 ;
tick = new Ticker("J2ME") ;
t.setTicker(tick);
display.setCurrent(t);
}
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
Arsitektur Aplikasi Midlet
Paket memiliki class MIDlet yang mendefinisikan MIDP (Mobile Information Device
Profile) dan interaksinya dengan perangkat handled yang bersangkutan. Class ini merupakan
class utama dalam sebuah MIDlet, yaitu semua aplikasi MIDlet harus merupakan turunan
dari class ini. Class ini merupakan class abstract, sehingga class turunannya harus
mengimplementasikan fungsi-fungsi abstract di dalamnya, perhatikan kode Java di bawah ini:
6. package javax.microedition.midlet;
import com.sun.midp.midlet.MIDletState;
import com.sun.midp.midlet.MIDletSuite;
public abstract class MIDlet{
protected MIDlet(){
state = new MIDletProxy(this);
}
protected abstract void startApp() throws
MIDletStateChangeException{
}
protected abstract void pauseApp() {
}
protected abstract void destroyApp(boolean unconditional)
throws
MIDletStateChangeException{
}
public final void notifyDestroyed(){
state.notifyDestroyed();
}
public final void notifyPaused(){
state.notifyPaused();
}
public final String getAppProperty(String key){
return state.getMIDletSuite().getProperty(key);
}
public final void resumeRequest(){
state.resumeRequest();
}
Private MIDletProxy state ;
}
Tampak ada tiga fungsi yang bersifat abstract yaitu :
protected abstract void startApp() throws
MIDletStateChangeException{
}
protected abstract void pauseApp() {
}
protected abstract void destroyApp(boolean unconditional)
throws MIDletStateChangeException{
}
7. Aplikasi MIDlet sudah pasti merupakan turunan dari class MIDlet diatas, harus
mengimplementasikan tiga fungsi diatas. Itulah mengapa pada contoh MIDlet HelloWorld
diatas, Anda menemukan implementasi dari fungsi-fungsi tersebut, sekalipun implementasi
fungsi tersebut tidak melakukan apa-apa. Fungsi-fungsi yang tidak abstract pada class MIDlet
bisa Anda gunakan karena otomatis diturunkan ke aplikasi MIDlet Anda, yakni ;
Public final void notifyDestroyed();
Digunakan oleh MIDlet untuk memberitahukan ke AMS bahwa MIDlet telah
dihancurkan dan dibersihkan dari memori. Mengenai AMS ini akan dibahas kemudian.
Public final void notifyPaused();
Digunakan oleh MIDlet untuk memberitahukan ke AMS bahwa MIDlet telah
dinonaktifkan sementara (paused).
Public final String getAppProperty(String key);
Digunakan oleh MIDlet untuk mengambil informasi properti dari AMS sesuai parameter
key pada fungsi getAppProperty().
Public final void resumeRequest();
Digunakan oleh MIDlet untuk meminta ke AMS agar diaktifkan kembali.
Ada beberapa istilah penting dalam daur hidup sebuah MIDlet, yaitu:
Application Management Software
MIDlet berjalan dalam sebuah perangkat handled. Application Management Software ini
merupakan software atau program bawaan yang ada dalam perangkat handled tersebut
untuk mengatur manajemen aplikasi MIDlet yang ada.
MIDlet
Merupakan aplikasi yang dijalankan pada sebuah perangkat handled. MIDlet tidak
berinteraksi langsung dengan hardware dari handphone, Palm atau perangkat handled
Anda yang lain, melainkan berinteraksi melalui Application Management Software.
AMS inilah yang akan menerima sinyal dari MIDlet bahwa MIDlet akan dijalankan atau
berhenti.
MIDlet State
Merupakan status dari sebuah MIDlet yang akan dijelaskan kemudian.
8. Status Midlet
Jika Anda mengenal Java Applet, Anda akan menemukan bahwa Applet dapat berada
dalam status init(), start(), stop() dan run(). Untuk MIDlet, ada tiga status dalam daur hidup
sebuah MIDlet yaitu:
Nama satus Keterangan
Paused Status ini terjadi ketika MIDlet selesai diinisialisasi dan tidakmelakukan
aksi apapun.
Pada status ini MIDlet tidak boleh sedang mengunci suatu sumber daya,
misalnya tidak boleh sedang melakukan locking atau mengunci sebuah file
untuk ditulis yang menyebabkan proses lain tidak bisa menulis ke file
tersebut.
Secara garis besar, status MIDlet adalah paused pada saat :
Setelah MIDlet dibuat dengan konstruktor new()
Dari status Active, kemudian berhasil memanggil fungsi
MIDlet.pauseApp()
Dari status Active, kemudian berhasil memanggil fungsi
MIDlet.notifyPaused()
Dari status Active, namun ketika akan start() terja
Actived Status ini terjadi ketika MIDlet sedang aktif/berjalan dengan normal, yakni
setelah memanggil fungsi MIDlet.startApp()
Destroyed Status ini terjadi ketika MIDlet berhenti berjalan (identik dengan exit)
sehingga seluruh sumber daya yang digunakan akan dibebaskan. Status ini
terjadi ketika berhasil dilakukan pemanggilan fungsi MIDlet.destroyApp()
atau MIDlet.notifyDestroyed()
Eksekusi Sebuah MIDlet
Umumnya urutan eksekusi sebuah MIDlet adalah sebagai berikut:
1. AMS (Application Management Software) menginisialisasi sebuah objek MIDlet,
sehingga MIDlet berada pada status Paused.
2. Ketika AMS memutuskan bahwa MIDlet sudah waktunya dijalankan, maka AMS
memanggil fungsi MIDlet.startApp() sehingga MIDlet akan mulai aktif berfungsi.
3. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan sementara, maka AMS
akan memanggil fungsi MIDlet.pauseApp() sehingga MIDlet akan berhenti bekerja.
9. 4. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan selamanya, maka AMS
akan memanggil fungsi MIDlet.destroyApp() sehingga alokasi memori yang digunakan
oleh MIDlet yang bersangkutan akan dibersihkan.
Referensi :
Ady Wicaksono, Pemrograman Aplikasi Wireless dengan Java, Elex Media Komputindo