Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 1
BAB IV
PEMOGRAMAN GRAFIK DAN SMS DENGAN J2ME
PEMBAHASAN MATERI :
Java mobile yang dipelajari adalah J2ME.
Pembuatan Program Grafik dengan Sun Java Wireless Toolkit 2.5.2.
Membuat Aplikasi SMS
TUJUAN BELAJAR :
Mahasiswa dapat mengetahui dan memahami pembuatan program kalkulator ( kali,
bagi, tambah dan kurang ) menggunakan java mobile J2ME dan menampilkannya ke
Ponsel.
A.
JAVA MOBILE
Java Mobile biasa dikenal dengan istilah J2ME (Java 2 MicroEdition) merupakan
salah satu bagian dari paket pemrograman Java. Paket pemrograman Java untuk saat ini pada
umumnya terbagi tiga, yaitu :
a)
Java 2 Enterprise Edition (J2EE).
Paket ini digunakan pada hardware yang mempunyai spesifikasi dan memori yang besar
seperti pada komputer server.
b)
Java 2 Standard Edition (J2SE).
Paket J2SE digunakan pada komputer desktop.
c)
Java 2 MicroEdition (J2ME).
Paket J2ME digunakan pada perangkat keras yang memiliki memori kecil seperti ponsel,
PDA dan sebagainya.
J2ME merupakan superset dari J2SE, yang artinya Java API yang ada di J2ME
sebagian diadopsi dari Java API J2SE. Jika pada J2SE menggunakan JVM (Java Virtual
Machine) sebagai Interprenternya, lain halnya pada J2ME yang menggunakan Kilo Virtual
Machine (KVM) sebagai interprenternya. Berdasarkan spesifikasi perangkat kerasnya J2ME
memiliki 2 macam konfigurasi yaitu CLDC (Connected Limited Device Configuration) dan
CDC (Connected Device Configurations). Untuk aplikasi pada paket J2ME diberi nama
MIDlet.
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 2
CLDC CDC
Mengimplementasikan sebagian fitur dari J2SE Mengimplementasikan seluruh fitur dari J2SE
Menggunakan KVM (Kilo Virtual Machine) Menggunakan CVM
Digunakan pada Handphone, PDA, Pager yang memiliki memori terbatas (160-512)kb
Digunakan pada perangkat internet
Televisi, Nokia communicator yang memiliki memori minimal 2 Mb
Processor 16 / 32 bit Processor 32 bit
B.
Membuat Aplikasi Sederhana dengan J2ME
1.
Membuat Aplikasi Grafik
Ketik kode berikut :
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*; import java.util.Random;
public class Grafik extends MIDlet {
private Command Keluar; private Display Layar;
public Grafik() {
Layar = Display.getDisplay(this);
}
public void startApp() {
Acak TampilLayar=new Acak(this); Layar.setCurrent(TampilLayar);
}
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
}
class Acak extends Canvas implements Runnable {
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 3 public int Tinggi=this.getHeight();
public MIDlet Tampilan; public Image Gambar;
public Random ProsesAcak; int Jumlah=0;
public Acak(MIDlet mid) { this.Tampilan=Tampilan;
ProsesAcak=new Random(255);
Gambar=Image.createImage(Lebar,Tinggi);
Thread Proses=new Thread(this); Proses.start();
}
public void createpic(){ int red,green,blue;
Graphics Garis=Gambar.getGraphics(); for (int i=0;i<500;i++){
red=Math.abs(ProsesAcak.nextInt() % (255));
green=Math.abs(ProsesAcak.nextInt() % 255);
blue=Math.abs(ProsesAcak.nextInt() % 255);
Garis.setColor(red,green,blue);
Garis.drawLine(Math.abs(ProsesAcak.
nextInt()%Lebar),
Math.abs(ProsesAcak.nextInt() %Tinggi),
Math.abs(ProsesAcak.nextInt() %Lebar),
Math.abs(ProsesAcak.nextInt() %Tinggi));
}; }
public void run(){ while (true){
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 4 this.repaint();
try{
Thread.sleep(500);
}catch(Exception e){ }
} }
public void paint (Graphics g){ g.drawImage(Gambar,0,0,0);
}
public void ClearScreen(Graphics g){
g.setColor(0,0,0);
g.fillRect(0,0,Lebar,Tinggi); };
}
Keterangan pada aplikasi Grafik:
Baris 1-3 merupakan fungsi Java API yang akan kita gunakan untuk memanggil
kompenen-komponen J2ME.
Baris 4-18 mendeklarasikan class MidletGrafik dan mendefinisikan Method- Method
dalam class MidletGrafik.
Baris 19-25 mendeklarasikan class Acak dalam class MidletGrafik kemudian
mendefiniskan Variabel-Variabel dalam class Acak untuk tampilan aplikasi.
Baris 26-32 kode-kode Constructor pada class Acak untuk menampilkan grafik secara
acak.
Baris 33-53 kode-kode yang berfungsi membuat logika grafik dalam format warna RGB
secara acak dan berulang-ulang.
Baris 54-66 kode-kode yang berfungsi untuk menampilkan grafik.
Baris 67-70 kode-kode yang berfungsi untuk membersihkan layar.
Baris 71 akhir dari blok kode class Acak.
2.
Membuat Aplikasi Listp
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 5 import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Listp extendes MIDlet implements CommandListener {
Display display;
list list;
TextBox texbox;
Command exitCommand = new Command("Exit", Command.EXIT, 1);
Command addCommand = new Command("Add Item", Command.OK, 1); Command removeCommand = new Command("Remove Item", Command.OK,1);
Command okCommand = new Command("OK",Command.OK, 1);
Command cancelCommand = new Command("Cancel",Command.EXIT,1); Ticker ticker = new Ticker("selamat Datang DI budidarma");
public Listp(){
list = new list ("Komputasinirkabel",List.IMPLICIT); list.setTicker(ticker);
list.addCommand(exitCommand); list.addCommand(addCommand);
list.addCommand(removeCommand); list.setCommandListener(this);
textbox = new TextBok("Add list Item","",64, TextField.ANY);
textbox.addCommand(okCommand); textbox.setCommandListener(this);
}
public void starApp() { if (display ==null) {
display = Display.getDisplay(this); display.setCurrent(list);
} }
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 6 public void destroyApp(boolean uncoditional) {
}
public void commandAction(Command c, Displayable d){ if (c == exitCommand){
notifyDestroyed(); }
if (c == addCommand){
textbox.setString(""); display.setCurrent(textbox);
}
if (c == removeCommand){
iny index = list.getselectedIndex(); if (index != -1){
list.insert(index, textbox.getString(),null); }
else{
// list might be empty
list.append(textbox.getString(),null;} display.setCurrent(list);
}
if (c==cancelcommand){
display.setCurrent(list);} }
}
3.
Membuat Aplikasi MidletSMS
Ketik kode berikut :
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 7 import javax.microedition.lcdui.*;
import javax.wireless.messaging.*; import java.io.IOException;
public class MidletSMS extends MIDlet implements CommandListener {
Command exitCommand = new Command( "Keluar", Command.EXIT, 2);
Command okCommand = new Command( "OK", Command.OK, 1);
Display display; String smsPort;
TextBox destinationAddressBox; Alert errorMessageAlert;
Alert sendingMessageAlert;
KirimPesan sender;
Displayable resumeScreen = null;
public MidletSMS() {
smsPort = getAppProperty("PortSMS");
display = Display.getDisplay(this); destinationAddressBox = new TextBox
("Masukkan Nomor HP Tujuan ?", null, 256, TextField.PHONENUMBER);
destinationAddressBox.addCommand( exitCommand);
destinationAddressBox.addCommand( okCommand);
destinationAddressBox.
setCommandListener(this); errorMessageAlert = new Alert(
"SMS", null, null, AlertType.ERROR); errorMessageAlert.setTimeout(5000);
sendingMessageAlert = new Alert( "SMS", null, null, AlertType.INFO);
sendingMessageAlert.setTimeout(5000); sendingMessageAlert.
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 8 sender = new KirimPesan(
smsPort, display, destinationAddressBox, sendingMessageAlert);
resumeScreen = destinationAddressBox; }
public void startApp() {
display.setCurrent(resumeScreen);
}
public void pauseApp() {
resumeScreen = display.getCurrent(); }
public void destroyApp(boolean unconditional) { }
public void commandAction(Command c, Displayable s) {
try {
if (c == exitCommand || c == Alert.DISMISS_COMMAND) {
destroyApp(false); notifyDestroyed();
} else if (c == okCommand) { promptAndSend();
}
} catch (Exception ex) {
ex.printStackTrace(); }
}
private void promptAndSend() {
String address = destinationAddressBox.getString();
if (!MidletSMS.isValidPhoneNumber(address)) { errorMessageAlert.setString(
"Nomor Telepon Tdak DiKenal"); display.setCurrent(errorMessageAlert,
destinationAddressBox); return;
}
String statusMessage = "Mengirim Pesan Ke : "
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 9 sendingMessageAlert.setString(statusMessage);
sender.promptAndSend("sms://" + address); }
private static boolean isValidPhoneNumber( String number) {
char[] chars = number.toCharArray(); if (chars.length == 0) {
return false; }
int startPos = 0; if (chars[0] == '+') {
startPos = 1; }
for (int i = startPos; i < chars.length; ++i) {
if (!Character.isDigit(chars[i])) { return false;
} }
return true; }
}
class KirimPesan
implements CommandListener, Runnable { Command sendCommand = new Command(
"Kirim", Command.OK, 1);
Command backCommand = new Command( "Kembali", Command.BACK, 2);
Display display; String smsPort;
String destinationAddress; TextBox messageBox;
Displayable backScreen; Displayable sendingScreen;
public KirimPesan(String smsPort, Display display, Displayable backScreen, Displayable sendingScreen) {
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 10 this.display = display;
this.destinationAddress = null; this.backScreen = backScreen;
this.sendingScreen = sendingScreen; messageBox = new TextBox(
"Ketik Pesan", null, 65535, TextField.ANY); messageBox.addCommand(backCommand);
messageBox.addCommand(sendCommand); messageBox.setCommandListener(this);
}
public void promptAndSend(String destinationAddress)
{
this.destinationAddress = destinationAddress; display.setCurrent(messageBox);
}
public void commandAction(Command c, Displayable s) {
try {
if (c == backCommand) {
display.setCurrent(backScreen); } else if (c == sendCommand) {
display.setCurrent(sendingScreen); new Thread(this).start();
}
} catch (Exception ex) {
ex.printStackTrace(); }
}
public void run() {
String address = destinationAddress + ":" + smsPort;
MessageConnection smsconn = null; try {
smsconn = (MessageConnection) Connector.open(address);
TextMessage txtmessage = (TextMessage) smsconn.newMessage(
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 11 txtmessage.setAddress(address);
txtmessage.setPayloadText( messageBox.getString());
smsconn.send(txtmessage); } catch (Throwable t) {
System.out.println("Pesan Terkirim"); t.printStackTrace();
}
if (smsconn != null) {
try {
smsconn.close();
} catch (IOException ioe) { System.out.println("Selesai"); ioe.printStackTrace();
} }
} }
Keterangan :
Baris 1-5 merupakan fungsi Java API yang akan kita gunakan untuk memanggil
kompenen-komponen J2ME.
Baris 6-18 mendeklarasikan class MIDletSMS sebagai MIDlet, beserta Command dan
Variabel-Variabelnya.
Baris 19-43 kode-kode Constructor MidletSMS yang berisikan logika-logika yang
akan dipakai pada program.
Baris 44-63 kode-kode Method yang berisikan pengaturan fungsi-fungsi dan
Variabel-Variabel yang akan dipanggil ketika berinteraksi dengan menu dalam
program.
Baris 64-77 kode-kode yang berisikan logika program untuk menampilkan dialog
dalam menu program.
Baris 78-96 kode-kode yang berisikan logika program untuk memeriksa jumlah digit
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 12
Baris 97-108 membuat dan mendeklarasikan class KirimPesan beserta
Variabe-Variabel dan Commandnya di dalam MIDletSMS. Class KirimPesan nantinya akan
berisi logika-logika yang berfungsi untuk melakukan pengiriman pesan.
Baris 109-121 merupakan Constructor class.KirimPesan yang mendeklarasikan
Variabel dan Command. yang akan digunakan.
Baris 122-161 kode-kode logika yang terdapat pada Method-Method Class kirim
pesan yang berfungsi untuk melakukan pengiriman pesan.
Baris 162-165 akhir dari class dan blok kode.
Catatan:
Anda bisa mencoba aplikasi ini pada ponsel anda. Transfer File yang ada di “Folder
Project”
\dist\
”Nama Project”.jar ke Ponsel, kemudian Install aplikasi tersebut.
Kedua aplikasi ini hanya pernah di coba pada Ponsel merk Nokia, belum pernah di
coba pada Ponsel merk lain.
Aplikasi ini pernah dicoba pada Ponsel Nokia seri 6600, hasilnya aplikasi bisa
berjalan tanpa ada masalah.
Aplikasi ini tidak cocok dengan Ponsel nokia seri N-Gage, muncul pesan Error pada
Disusun Oleh : Ferlianus Gulo | Website : ferlianus-gulo.blogspot.com 13