PENGENALAN TEKNOLOGI JAVA 1. SEJARAH SINGKAT JAVA Java adalah bahasa pemrograman Object-Oriented yang dikembangkan oleh perusahaan Sun Microsystem. Java berawal dari proyek ‘Green’ yang dipimpin oleh James Gosling. Proyek tersebut berusaha mengembangkan sebuah bahasa berbasis object-oriented baru yang portable dan dapat diimplementasikan pada beragam peralatan dengan kapasitas memori terbatas. Sesuai dengan tujuan proyek ‘Green’, java dibekali dengan kemampuan untuk dapat dipergunakan pada beragam platform, dengan kata lain Java dirancang sebagai bahasa yang portable. Berbeda dengan tingkat portabilitas yang dimiliki oleh bahasa lain, seperti C/C++ misalnya, portabiltas Java sangat tinggi. Aplikasi yang ditulis dengan Java dapat langsung dijalankan pada platform yang mendukung Java tanpa perlu mengkompilasi ulang kode sumber Java tersebut. Motivasi sesungguhnya dari Java adalah kebutuhan akan sebuah bahasa yang bisa digunakan platform yang bisa dimasukkan ke dalam berbagai produk elektronik seperti pemanggang roti dan lemari es. Salah satu dari proyek pertama yang dikembangkan menggunakan Java adalah remote control yang diberi nama Star 7. Padasaat yang sama, World Wide Web dan Internet berkembang sangat cepat. Gosling menyadari bahwa java dapat digunakan untuk pemrograman Internet. Saat ini distribusi Java dan class pendukungnya dibagi dalam tiga bagian yang masing-masing memiliki konsentrasi tersendiri yaitu : Java 2 Standard Edition (J2SE) untuk aplikasi desktop Java 2 Enterprise Edition (J2EE) untuk aplikasi enterprise dengan focus pada pengembangan sisi webserver, termasuk seriet, JSP, EJB, XML Java 2 Micro Edition (J2ME) untuk piranti dengan terbatas (perangkat mobile) JavaCard Smart Cards kemampuan 2. KARAKTERISTIK JAVA Memiliki kemampuan dan spesifikasi yang sangat bervariasi Tidak dapat melakukan pengembangan pada perangkat tersebut Kemampuan untuk mengakses informasi dari internet Perkembangan teknologi yang sangat cepat 3. MEKANISME KOMPILASI APLIKASI JAVA Proses pembuatan aplikasi Java pertama kali dilakukan dengan pengetikan kode sumber Java pada suatu file berakhiran ‘.java’. File yang digunakan sebagai kode sumber Java adalah file teks biasa sehingga dalam penulisannya dapat mempergunakan beragam teks editor seperti notepad, editplus, ultraedit dan lainnya. Namun demikian saat ini telah tersedia Java IDE (Integrated Development Environment) baik yang gratis maupun komersil yang dapat mempermudah penulisan aplikasi Java seperti Sun NetBean, Sun Forte, dan Borland JBuilder. Yang perlu diperhatikan, penamaan file tersebut harus sama dengan nama class yang ditulis didalamnya. Penamaan ini bersifat case-sensitive. Tahap selanjutnya adalah tahap kompilasi. Pada tahap ini, file sumber akan dibaca dan diterjemahkan oleh Kompiler Java. Jika tidak terdapat kesalahan pada file sumber maka akan dibuat suatu file objek yang merupakan kodefikasi dari file sumber itu sendiri. File objek ini memiliki akhiran ‘.class’ dan disebut byte-code. File inilah yang merupakan file aplikasi Java yang dapat dieksekusi. File-file byte-code yang dihasilkan dapat dipaketkan dalam satu file tunggal yang memiliki akhiran ‘.jar’, file ini disebut ‘Java Archive’. Selain keuntungan dalam hal menyatukan secara fisik file-file aplikasi Java, proses pemaketan ini juga akan melakukan kompresi sehingga dapat memperkecil ukuran secara keseluruhan. Java archive ini dikembangkan dari teknologi yang dipakai dalam kompresi ZIP. Setelah dipaketkan, byte-code yang terdapat didalamnya tetap dapat dijalankan seperti biasa sehingga tidak perlu meng-ekstrak kembali dari paket tersebut untuk menggunakannya. 4. MEKANISME EKSEKUSI JAVA Rahasia kemampuan Java untuk dijalankan pada beragam platform adalah pertama, karena Java tidak didesain untuk platform dan hardware tertentu. Kedua, aplikasi Java dijalankan secara ter-interpreter. Semua system yang akan mengimplementasikan Java harus memiliki interpreter Java. Interpreter tersebut bertanggunag jawab dalam menyediakan lingkungan eksekusi yang aman dan stabil bagi aplikasi Java. Interpreter tersebut disebut Java Virtual Machine (JVM). JVM merupakan aplikasi native untuk platform yang spesifik DASAR PEMROGRAMAN JAVA 1. PERBEDAAN JAVA DENGAN C/C++ Pada Java, manajemen memory dinamis dan pointer dilakukan secara otomatis. Pada C++ pemrograman melakukan sendiri alokasi dan dealokasi memory. Otomatisasi ini menghilangkan kemungkinan bagi penggunaan pointer yang dapat merusak kestabilan program dan system operasi. Java tidak mengenal multiple inheritance seperti pada C/C++. Multiple Inheritance membingungkan dan berakibat pada sulitnya pembuatan aplikasi dan compiler. Sebagai ganti yang lebih baik, Java menggunakan interface. Java merupakan bahasa OOP murni sedangkan C++ adalah bahasa OOP hybrid Java menggunakan model Exception dalam menangani kesalahan program Java tidak mempergunakan compiler-directive pada source code Java memiliki fasilitas garbage-collector yang bekerja secara otomatis untuk menjamin ketersediaan memori dengan membebaskan memori yang tidak terpakai. Java sangat portable baik pada file sumbernya maupun hasil kompilasinya, sedangkan C++ hanya portable pada level kode sumbernya saja. Spesifikasi bahasa dan implementasi Java sudah ditetapkan dan tidak mengikuti suatu mesin atau platform tertentu, C++ sangat tergantung pada mesin dan platform yang akan digunakan. 2. ISTILAH & KONSEP PEMROGRAMAN PADA JAVA Class Adalah struktur yang menjelaskan sifat-sifat dari suatu objek. Sifat disini berupa informasi yang dimiliki objek tersebut serta aksi yang dapat dilakukan oleh objek tersebut. Objek Adalah contoh dari suatu class. Dapat dianggap class adalah tipe datanya dan objek adalah datanya. Constructor Method yang pertama kali dijalankan ketika objek diciptakan dari suatu class. Field/Data member Adalah pengenal yang menyimpan informasi dari suatu objek. Method Adalah aksi yang dapat dilakukan oleh suatu objek. Dapat dianalogikan dengan procedural/sub/function. Abstract Suatu method dari suatu class dapat dibuat tanpa implementasi kode apapun. Method seperti ini disebut method abstract dan untuk menggunakannya harus didefinisikan dahulu pada turunan class tersebut. Interface Adalah suatu abstract dari class. Interface hanya berisi daftar field dan method tanpa detail kode. Inheritance Penurunan sifat sedemikian hingga suatu class yang diturunkan dari suatu class lainnya akan memiliki member yang sama dengan class dimana ia diturunkan. Polymorphisme Kemampuan bagi penulisan suatu method dengan nama yang sama namun memiliki parameter dan definisi berbeda. Bentuk Umum Kode sumber Java package nama_package; import nama-package.namaclass; … [deklarasi_interface] [deklarasi_class] Bentuk Umum Deklarasi Interface interface namainterface { [modifier] namaclass namafield; … [modifier] namaclass namamethod(); [modifier] namaclass namamethod( [daftar_parameter] ); … } 3. JENIS-JENIS MODIFIER Modifier berguna untuk menentukan sifat dari suatu class, field, ataupun method dalam suatu program Java. Berikut adalah beberapa modifier yang sering digunakan : Public Method/field dapat diakses oleh semua objek. Private Method/field hanya dapat dipergunakan oleh class tersebut. Protected Method/field tersebut hanya dapat dipergunakan oleh class tersebut dan class turunannya. Static Method/field tersebut dapat diakses tanpa harus menciptakan objeknya terlebih dahulu. Semua objek yang dibuat dari class yang memiliki field static akan memiliki nilai yang sama untuk field tersebut. Final Menyatakan bahwa definisi dari field/method tersebut tidak dapat berubah lagi. 4. KONVERSI PENULISAN PROGRAM PADA JAVA Konvensi ini untuk menentukan penulisan nama method, field yaitu sebagai berikut Nama class dituliskan dengan huruf capital pada setiap awal kata pembentuknya Nama method merupakan klausa kerja dan ditulis dengan diawali oleh huruf kecil untuk kata pertama dan huruf besar untuk setiap huruf pertama dari kata-kata berikutnya, jika ada. Contoh : ambilDaftar Pelanggan(), buat koneksi(), selesai(). Field static ditulis dengan menggunakan huruf capital semua. Contoh : MAX_PELANGGAN, DISCOUNT, MAX_PELURU. Field biasa tidak dibuat public melainkan diakses dan diubah dengan melalui pemanggilan method PERANGKAT MOBILE Perangkat mobile memiliki banyak jenis dalam hal ukuran, desain dan layout, tetapi mereka memiliki kesamaan karakteristik yang sangat berbeda dari sistem desktop. Ukuran yang kecil Perangkat mobile memiliki ukuran yang kecil. Konsumen menginginkan perangkat yang terkecil untuk kenyamanan dan mobilitas mereka. Memory yang terbatas Perangkat mobile memiliki memory yang kecil, yaitu primary (RAM) dan secondary (disk). Pembatasan ini adalah salah satu factor yang mempengaruhi penulisan program untuk berbagai jenis dari perangkat ini. Daya proses yang terbatas System mobile tidaklah setangguh rekan mereka yaitu desktop. Ukuran, teknologi dan biaya adalah beberapa factor yang mempengaruhi status dari sumber daya ini. Mengkonsumsi daya yang rendah Perangkat mobile menghabiskan sedikit daya dibandingkan dengan mesin desktop. Perangkat ini harus menghemat daya karena mereka berjalan pada keadaan dimana daya yang disediakan dibatasi oleh baterai-baterai. Kuat dan dapat diandalkan Karena perangkat mobile selalu dibawa keman saja, mereka harus cukup kuat untuk menghadapi benturan-benturan, gerakan, dan sesekali tetesan-tetesan air. Konectivitas yang terbatas Perangkat mobile memiliki bandwith rendah, beberapa dari mereka bahkan tidak tersambung. Kebanyakan dari mereka menggunakan koneksi wireless. Masa hidup yang pendek Perangkat-perangkat konsumen ini menyala dalam hitunagan detik kebanyakan dari mereka selalu menyala. PENGENALAN JAVA 2 MICRO EDITION (J2ME) J2ME adalah satu set spesifikasi dan teknologi yang focus kepada perangkat konsumen. Perangkat ini memiliki jumlah memori yang terbatas, menghabiskan sedikit daya dari batere, layar yang kecil dan bandwith jaringan yang rendah. Dengan perkembangbiakan perangkat mobile consumer dari telepon, PDA, kotak permainan ke peralatan-peralatan rumah, Java menyediakan suatu lingkungan yang portable untuk mengembangkan dan menjalankan aplikasi pada perangkat ini. Program J2ME, seperti semua program Java adalah diterjemahkan oleh VM. Programprogram tersebut dikompile ke dalam byte-code dan diterjemahkan dengan Java Virtual Machine (JVM). Ini berarti bahwa program-program tersebut tidak terhubung langsung dengan perangkat. J2ME menyediakan suatu interface yang sesuai dengan perangkat. Aplikasi-aplikasi tersebut tidak harus dikompile ulang supaya mampu dijalankan pada mesin yang berbeda. Inti dari J2ME terletak pada configuration dan profile-profile. Suatu configuration menggambarkan lingkungan runtime dasar dari suatu system J2ME. Ia menggambarkan core library, virtual machine, fitur keamanan dan jaringan. Untuk piranti bergerak, terdapat beragam profile. Salah satunya yang telah mencapai status final adalah Mobile Information Device Profile (MIDP). DASAR-DASAR MIDlet Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinterkasi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy. MIDlet adalah bagian dari package javax.microedition.midlet. sebuah MIDlet harus diextend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD) Suatu MIDlet tidak harus memiliki (dan memang harus tidak mempunyai) sebuah method public static void main(string[] argv). Method tersebut tidak akan dikenal lagi oleh AMS sebagai titik awal sebuah program. 1. SIKLUS MIDlet Kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. MIDlet pada awalnya masuk status “Pause” setelah perintah baruu dibuat. AMS memanggil constructor public tanpa argumen dari MIDlet. Jika sebuah exception terjadi dalam constructor, MIDlet memasuki status “Destroyed” dan membuangnya segera. MIDlet masuk ke dalam status “Active” atas pemanggilan method startUp() oleh AMS. MIDlet masuk ke dalam status “Destroyed” ketika AMS memanggil method destroyApp(). Status ini juga kembali diakses ketika method notifyDestroyed() kembali dengan sukses kepada aplikasi. Dengan catatan bahwa MIDlet hanya bisa memasuki staus “Destroyed” sekali dalam masa hidupnya. Untuk membuat sebuah turunan class MIDlet maka kita harus mendefinisikan terlebih dahulu method-method abstract yang dimiliki oleh class MIDlet tersebut dalam class yang akan dibuat nantinya. Method tersebut adalah: startApp() Akan dipanggil ketika MIDlet memasuki fase ‘started’ dari fase ‘paused’. Disini biasanya dilakukan proses inisialisasi, baik inisialisasi layer maupun objek-objek yang dipergunakan dalam aplikasi MIDlet. pauseApp() Akan dipanggil ketika MIDlet memasuki fase ‘paused’ Biasanya berisi instruksi untuk membebaskan memory yang dipakai oleh aplikasi MIDlet sekaligus menyimpan kondisi aplikasi MIDlet saat ini. destroyApp() Akan dipanggil ketika MIDlet memasuki fase ‘destroyed’ yaitu ketika eksekusi MIDlet dihentikan 2. USER INTERFACE Untuk menyediakan user interface pada suatu aplikasi MIDlet dipergunakan classclass turunan dari class Diplayable. Package yang berisi koleksi class-class yang dapat dipergunakan untuk membuat user interface adalah package javax.microedition.lcdui. Sedangkan untuk mengatur user interface yang aktif pada aplikasi MDliet, dilakukan pemanggilan setcurrent() dengan memanfaatkan class Display. Class Display ini memiliki method static yang dapat dipergunakan oleh aplikasi MIDlet untuk melakukan operasi yang berhubungan dengan layar. Listing berikut akan menunjukkan user interface menggunakan class Form berisi tulisan singkat kepada pengguna: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class nothelloworld extends MIDlet { private Form formDepan; public { formDepan = new Form (“Halaman Utama”); formDepan.append(“Ini akan tampil loh..”); } public void startApp() { Display.getDisplay(this).setCurrent(formDepan); } public void pauseApp() {} public void destroyApp(Boolean b) } {} Perhatikan baris perintah pada nomor-nomor yang dicetak tebal. Pada baris enam dideklarasikan bahwa class nothelloworld mempunyai field ‘formDepan’ yang merupakan objek dari class Form, inisialisasi formDepan terdapat pada bagian constructor dari MIDlet nothelloworld tersebut. Baris enambelas menunjukkan bagaimana suatu user-interface dapat ditampilkan kepada pengguna melalui pemanggilan method setCurrent(). Sedangkan lawannya getCurrent() digunakan untuk mendapatkan referensi user-interface yang aktif pada layer. 3. CLASS HIGH-LEVEL USER-INTERFACE API High-Level user-interface API sendiri terdiri atas beberapa class dan interface. Class-class ini diturunkan dari class Screen yang merupakan turunan dari class Displayable. Alert (String title) Alert (String title, String teks, Image icon, AlertType jenis peringatan) adalah user-interface yang ditunjukkan untuk memberikan pemberitahuan kepada pengguna aplikasi dalam interval tertentu. Selang waktu ini dapat diatur melalui pemanggilan method setTimeout(). Apabila pesan yang ditampilkan cukup panjang atau interval yang digunakan adalah FOREVER, maka Alert akan tetap bertahan sampai pengguna memilih untuk meninggalkan layer Alert tersebut, misalnya dengan memilih perintah ‘exit’ atau ‘dismiss’ pada beberapa perangkat. Berikut adalah daftar tipe Alert : Tipe Alarm Memperingatkan terjadwal Contoh Penerapan pengguna akan suatu kegiatan yang Confirmation Pemberitahuaan mengenai status dari aksi yang dilakukan Error Pesan kesalahan Info Informasi umum Warning Peringatan terhadap aksi yang berbahaya telah TextBox (String title, String teks, int maxKarakter, int filter) Adalah user-interface yang dipergunakan untuk mendapatkan masukkan karakter dari pengguna. Dalam mendapatkan data yang diinginkan, dapat diterapkan pemfilteran sehingga input yang diterima oleh aplikasi dari pengguna dapat diatur sesuai dengan keperluan. Filter ini diambil dari field static milik class TextField. Beberapa daftar filter tersebut : Filter Any Keterangan Menerima semua input dari pengguna Emailaddr Pola input sesuai dengan alamat e-mail Numeric Hanya menerima bilangan bulat Password Input dari pengguna tidak ditampilkan Phonenumber Menerima pola nomor telepon URL Menerima pola input URL List (String title, int tipeList) List (String title, int tipeList, String[] daftarPilihan, Image[] gambar) Adalah user-interface yang menyediakan fasilitas untuk melakukan pemilihan terhadap suatu daftar. Pemilihan ini bersifat tunggal maupun berganda. Daftar yang terdapat pada suatu List dapat pula diberikan gambar. Hasil pemilihan ini kemudian dapat dibaca kembali oleh program sehingga dapat dilakukan aksi yang bersesuaian. Daftar pilihan itu sendiri dapat ditentukan pada saat pembuatan objek List, maupun melalui pemanggilan method append() maupun insert(). Pilihan yang sudah terdaftar juga dapat dimanipulasi dengan pemanggilan method set(). Terdapat tiga mode dari List yaitu IMPLICIT yang dapat dipergunakan untuk membuat daftar menu, EXCLUSIVE yang sifatnya seperti radio button, dan MULTIPLE yang bekerja seperti check box. Form (String title) Form (String title, item[] daftaritem) Adalah user-interface yang menyediakan fasilitas untuk penempatan objekobjek dalam satu layer. Objek-objek ini dapat berupa objek statis seperti tulisan dan gambar, maupun objek yang dapat diedit oleh pengguna seperti textbox, radio button, check box, serta slider. Form sendiri hanyalah layer kosong saja dan bertindak sebagai wadah bagi objek-objek lain. Objek-objek yang terdapat dalam layer Form dibuat dengan cara menambahkan objek-objek turunan class Item ke objek Form pada saat objek Form dibuat melalui pemanggilan method append(). Berikut turunan class Item yang dapat dimasukkan dalam Form : Class ChoiceGroup Keterangan Item untuk Form yang bekerja seperti class List DataField Item untuk Form untuk mendapatkan input tanggal Gauge Item untuk Form yang dapat bekerja sebagai indicator seperti progress bar maupun seperti slider ImageItem Item untuk Form yang berguna untuk menyisipkan gambar StringItem Item untuk Form berupa teks statis TextField Item untuk Form yang bekerja seperti Text Box Berikut adalah tampilan sebuah Form yang berisi Item StringItem ChoiceGroup pada perangkat MID dengan resolusi layer tinggi : Ticker (String title) Adalah merupakan objek yang akan menampilkan tulisan bergerak pada layer. Ticker tidak berdiri sendiri melainkan berada didalam objek turunan dari class Screen. Ticker tidak dapat ditambahkan dengan memanggil method setTicker() dari objek turunan class Screen tersebut. Meskipun semua class turunan dari class Screen mempunyai method setTicker(), tetapi tidak semua dapat menampilkan Ticker, Alert misalnya. Berikut adalah tampilan Ticker yang dipasang pada sebuah Form, perhatikan bagian atas layer : 4. CLASS LOW-LEVEL USER-INTERFACE API Low-Level API menyediakan akses grafis pada layer aplikasi serta pembacaan event penekanan tombol maupun pointer pada perangkat MID yang mendukung input touch-screen. Pemrogram bertanggung jawab sepenuhnya pada interaksi dari layer aplikasi yang menggunakan Low-Level API dalam menyediakan interaksi yang nyaman pada pengguna. Class Canvas Canvas adalah turunan dari class Displayable yang menyediakan lingkungan yang tepat bagi aplikasi yang membutuhkan operasi grafis dan menangani event low-level. Penggunaan Canvas yang utama adalah pada aplikasi game karena Canvas mendukung penempatan objek-objek grafis dan pembacaan tombol. Penanganan Event Seperti yang telah disebutkan bahwa class Canvas mampu membaca penekanan tombol keypad. Selain itu class Canvas juga memungkinkan untuk melakukan pembacaan posisi pointer pada perangkat yang menggunakan layer touch-screen. Berikut adalah method yang akan dipanggil untuk event yang bersesuaian pada Canvas : Method keyPressed(int keyCode) keyReleased(int keyCode) keyRepeated(int keyCode) pointerDragged(int x, int y) pointerPressed(int x, int y) pointerReleased(int x, int y) showNotify() hideNotify() Pemanggilan Tombol ditekan Tombol dilepas Tombol ditekan terus Pointer ditekan dan digerakkan Pointer ditekan Pointer dilepaskan Objek Canvas ditampilkan Objek Canvas disembunyikan Operasi Grafis Class Canvas sendiri tidak memiliki method untuk melakukan operasi-operasi grafis. Operasi grafis pada Canvas dilakukan melalui object Graphics yang menjadi parameter pada method paint() milik class Canvas tersebut. Operasi yang dapat dilakukan Graphics secara umum meliputi: a. Operasi Grafis Geometri Class Graphics mendukung penggambaran bentuk-bentuk geometri seperti garis, persegi, persegi dengan sudut tumpul, lingkaran, dan busur. Tersedia pula method untuk melakukan penggambaran bentukbentuk tersebut dengan pengarsiran pada bidang dalamnya. b. Operasi Grafis Pixel Pada class Graphics, system koordinat yang dianut bukanlah koordinat dari pixel tersebut melainkan koordinat batasan (boundary) dari pixel tersebut dalam suatu area berbentuk empat persegi panjang. System koordinat sumbu x dimulai dari sebelah kiri, positif ke arah kanan. Sumbu y dimulai dari atas, positif ke bawah. Operasi yang terjadi pada class Graphics hanyalah operasi penggantian pixel. Tidak tersedia method untuk mendapatkan warna pixel maupun mengkombinasikan warna pixel. Namun tersedia method untuk mengatur metode penggambaran garis serta dukungan terhadap batasan penggambaran (clipping area). c. Penggambaran Teks Class Graphics mendukung operasi penggambaran teks baik itu perkarakter, string, maupun sub-string. Pada class Graphics tersedia ‘anchor point’ untuk memudahkan penggambaran teks. Anchor point ini menentukan penempatan teks relaif terhadap koordinat yang ditunjuk. Untuk horizontal tersedia anchor LEFT, HCENTER, dan RIGHT. Sedangkan untuk vertical tersedia TOP, BASELINE, dan BOTTOM. Tipe anchor itu sendiri merupakan sebuah anchor vertical dengan horizontal yang dipadukan oleh operator OR. Penggunaan Font Graphics menggambar teks berdasarkan objek Font yang sedang aktif. Hal yang unik dengan class Font adalah Font tidak bisa dibuat objeknya karena tidak mempunyai constructor yang public. Objek Font bisa memintanya dari system berdasarkan ciri-ciri dari Font tersebut melalui pemanggilan method getFont() ataupun method getDefaultFont() public static Font getFont(int face, int style, int size) System kemudian akan memberikan objek Font yang paling mendekati dengan yang diminta. Perlu diperhatikan bahwa mungkin saja system mengembalikan objek Font yang tidak mirip sama sekali dengan yang diminta karena Font tersebut tidak tersedia pada system. Penggunaan Image Class Image adalah class yang menyimpan data gambar MIDP 1.0 hanya mengharuskan dukungan bagi gambar dengan format PNG bagi perangkat yang mengimplementasikannya. Objek Image setelah dibuat, nantinya dapat dipergunakanoleh objek Graphics dengan pemanggilan method drawImage() dengan bentuk umum drawImage(Image img, int x, int y, int anchor) Anchor yang dipergunakan sama seperti anchor pada teks, hanya saja khusus untuk Image dapat dipergunakan anchor VCENTER, namun tidak ada anchor BASELINE. Objek Image sendiri ada dua jenis yaitu objek Image immutable yaitu objek Image yang tidak dapat diubah setelah dibuat, serta objek Image mutable yaitu objek Image yang dapat diubah nilai pixelnya. Kebanyakan dari aplikasi MIDlet hanya membutuhkan objek Image immutable. Teknik Animasi Pada aplikasi MIDlet, terutama pada bisang permainan, animasi merupakan bagian yang penting dan dapat mempengaruhi minat pengguna terhadap aplikasi tersebut. Secara sederhana dapat dikatakan bahwa animasi adalah serangkaian perubahan keadaan pada layer, baik itu sebagian atau seluruhnya, sehingga aplikasi terlihat hidup. Perubahan ini dapat berupa perubahan bentuk maupun posisi. Sebagai contoh, permainan pesawat tempur akan menggunakan dua gambar yang berbeda yang ditampilkan secara bergantian untuk menggambarkan nyala api disertai dengan kemampuan untuk berpindah posisi. Waktu untuk melakukan perubahan tampilan layer dapat ditentukan dari event dari pengguna seperti penekanan keypad, maupun dari program dengan melakukan repetisi. Jika mengandalkan event dari pengguna, maka layer baru akan diperbaharui setelah terjadi event dari pengguna. Berarti untuk permainan pesawat tempur animasi api hanya akan terlihat apabila tombol tetap ditekan. Jika mengandalkan repetisi, maka selama repetisi tersebut belum selesai event dari pengguna tidak dapat diterima. Ini disebabkan aplikasi MIDlet biasa hanya menggunakan satu thread pada proses yang sama sehingga untuk menjalankan aksi yang berbeda disaat yang bersamaan tidak memungkinkan. Untuk dapat melakukan hal tersebut, maka aplikasi MIDlet tersebut harus dirancang dengan dukungan multi threading. Terdapat tiga cara untuk membuat dukungan terhadap multi-threading dalam aplikasi MIDlet : a. Dengan membuat turunan dari class Thread b. Membuat class yang mengimplementasikan interface Runable c. Menggunakan objek Timer dan Timer Task 5. PENYIMPANAN DATA Ada kalanya sebuah aplikasi, selain tugas pemrosesan, membutuhkan operasi penyimpanan data permanent yang tidak akan hilang ketika aplikasi berakhir. Yang disimpan tersebut kemudian dapat dimanfaatkan kembali oleh aplikasi disaat aplikasi dijalankan kembali Mekanisme Record Store MIDP menyediakan fasilitas untuk penyimpanan data melalui class RecordStore Class ini digunakan untuk mengakses data permanent yang tersimpan pada perangkat MID yang disebut dengan ‘record store’ yang dapat dianalogikan dengan ‘tabel’ pada DBMS. Record pada suatu record store tidak memiliki panjang yang tetap. Record itu sendiri dipandang sebagai array byte sehingga umumnya perlu dilakukan pengkonversian data dalam memanfaatkan record pada aplikasi MIDlet. Tiap record memiliki nomor pengenal (RecordID) yang merupakan primary key bagi record store tersebut. Enumerasi Record Enumerasi record dipergunakan untuk mendapatkan ID mapun data dari record-record pada record store. Untuk melakukan enumerasi dipergunakan method enumerateRecords() dengan bentuk umum : RecordEnumeration enumerateRecords (RecordFilter filter, RecordComparator comparator, Boolean keepUpdated) Pemfilteran Data Record yang diambil ketika pemanggilan method enumerateRecord() dapat dibatasi sehingga record-record yang memenuhi criteria tertentu saja yang didaftarkan pada objek RecordEnumeration. MIDP menyediakan interface RecordFilter untuk tujuan tersebut. Interface ini mengharuskan keberadaan method matches() pada class yang mengimplementasikannya. Method inilah yang menentukan apakah suatu record memenuhi criteria atau tidak. Sebagai contoh, misalkan sebuah aplikasi menyimpan data pada record dalam format sebagai berikut : Maka dengan menggunakan pemfilteran, dimungkinkan untuk menampilkan record pemain dengan criteria level, batasan score, huruf pertama nama pemain dan lain sebagainya. Pengurutan Data Seperti yang telah disebutkan sebelumnya, bahwa daftar record pada objek RecordEnumeration dapat diurukan dalam aturan tertentu apabila tersedia objek RecordComparator pada pemanggilan method enumerateRecord(). Interface RecordComparator digunakan untuk melakukan perbandingan data pada tahap pengurutan. Interface ini mengharuskan keberadaan method compare() yang memiliki dua parameter yaitu data yang akan dibandingkan dalam proses pengurutan bagi class yang mengimplementasikannya. Melalui method inilah dapat ditentukan urutan suatu record terhadap record lainnya dapat ditentukan. Nilai balik dari method tersebut akan bernilai EQUIVALENT apabila kedua data tersebut sama. Memberikan nilai FOLLOWS apabila data pertama menempati posisi berikutnya setelah data kedua. Serta memberikan nilai PRECEDES apabila posisi data pertama mendahului data kedua. 6. KONEKSI HTTP MIDP menyediakan API yang dapat dipergunakan untuk membuat aplikasi MIDlet yang memanfaatkan jaringan MIDP 1.0 melalui class Connectoryang terdapat pada package javax.microedition.io menspesifikasikan class dan interface untuk membuat koneksi jaringan secara umum. HTTP (HyperText Transfer Protocol) adalah protocol yang mengatur bagaimana sebuah dokumen dikirimkan pada layangan World Wide Web di internet maupun intranet. Pada jaringan HTTP terdapat server HTTP yang melayani permintaan dokumen, serta user-agent yaitu tool yang digunakan oleh client HTTP seperti Microsoft Internet Explorer dan sejenisnya. MIDP menyediakan fasilitas yang memungkin bagi semua aplikasi MIDlet untuk melakukan koneksi internet. Class Connector ini merupakan class yang terdiri atas method-method static yang menyediakan koneksi secara generic. Terdapat dua metode yang bisa digunakan untuk membuka koneksi HTTP pada aplikasi MIDlet dengan memanfaatkan class Connector. Menggunakan method open() untuk membuka koneksi Menggunakan method pembuat Stream