Anda di halaman 1dari 109

Riyanto Sigit

Wiratmoko Yuwono
1
1.1. Tujuan:
Mahasiswa dapat menjalankan aplikasi platIorm Java 2, dan dapat menjalankan
aplikasi J2ME wireless toolkit.
1.2. Latihan:
Pada latihan ini kita dapat menyelesaikan langkah-langkah sbb:
Menjalankan Aplikasi J2ME Wireless Toolkit
Membuka contoh-contoh project, dan membuat project baru.
Tujuan dari latihan ini adalah mengenal lebih jauh dengan aplikasi J2ME Wireless Toolkit
environment, dan kemudian anda dapat membuka contoh-contoh project yang anda pilih
1.3. Persiapan:
Tidak ada persiapan dari latihan ini.
Langkah 1- Menjalankan Aplikasi 12ME Wireless Toolkit
Ikuti step ini:
1. Buka window terminal dan ketikkan perintah sebagai berikut :
cd ENTER~
Perintah ini, akan membawa anda ke Home directory
2. Untuk memulai J2ME wireless Toolkit, ketikkan perintah sebagai berikut :
ktoolbar ENTER~
Maka selanjutnya, aplikasi J2ME Wireless Toolkit akan dijalankan.
3. Kemudian buka contoh-contoh project yang kamu pilih dan buatlah settingan yang pas
mengenai toolkit tersebut.
Praktikum
1
Arsitektur 12ME
Riyanto Sigit
Wiratmoko Yuwono
2
2.1. Tujuan:
Mahasiswa dapat menulis dan membangun aplikasi (MIDlet) mobile inIormation
device proIile (MIDP),Memeriksa sebuah device apakah dapat berjalan pada sebuah
MIDlet
2.2. Latihan:
Extend main class aplikasi untuk suatu game berjudul StarShipBattle 2004 dan mengendalikan
jalannya game (LiIe Cycle) serta membuat Iile StarShipBattle.java
Pada latihan ini kita dapat menyelesaikan langkah-langkah sbb:
Mengembangkan main class aplikasi game StarShip Battle 2004
Mengendalikan jalannya game (LiIe Cycle) StarShip Battle 2004
Tujuan dari latihan ini adalah mengembangkan aplikasi dalam satu rangkaian latihan dimana
latihan tersebut dapat menambah Ieature dan Iungsi dari game. Pada latihan ini diasumsikan
membuat:
Class utama StarShipBattle
Membuat Iile StarShipBattle.java
2.3. Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Latihan 1- Membuat class dimana class tersebut merupakan Extend dari MIDlet class
Copy Iile pada lokasi direktori ..\apps\Lab2_Exercise1\src dan ikuti step ini:
1. Mengimplementasikan StarShipBattle constructor.
Gunakan method System.out.println(String s) untuk mengeluarkan pesan bahwa aplikasi
sedang berjalan.
Praktikum
2
Membangun MIDlet
Riyanto Sigit
Wiratmoko Yuwono
3
2. Mengimplementasikan method berikut untuk memberi Iungsi aplikasi start, stop, dan
pause :
a. starApp() Gunakan System.out.println (String S) untuk mengeluarkan nama
method yang dipanggil.
b. pauseApp() Gunakan System.out.println (String S) untuk mengeluarkan nama
method yang dipanggil.
c. destroyApp() Gunakan System.out.println (String S) untuk mengeluarkan nama
method yang dipanggil.
Latihan 2- Memeriksa sebuah device apakah dapat berjalan pada sebuah MIDlet
Pada langkah ini, kita modiIikasi klas StarShipBattle.java dari latihan no 1 untuk memastikan
game berjalan dengan baik. Kita harus memeriksa terlebih dahulu apakah aplikasi support
dengan versi MIDP dan J2ME konIigurasi platIorm. Anda meminta property deIault dari device
yang menyediakan setting Microedition-ProIile dan Microedition-ConIiguration dari Java
Application Descriptor (JAD). Lalu kita bandingkan properties dengan menetapkan nomor
versinya : Jika nomor versi cocok, kirimkan output ke console yang indikasinya cocok dengan
nomor. Jika setting tidak cocok, kirimkan output ke console dan keluar dari aplikasi.
Copy Iile pada lokasi direktori ..\apps\Lab2_Exercise2\src dan ikuti langkah berikut ini:
1. Tetapkan private properties dalam Iile class StarShipBattle
proIileVersion 'MIDP-2.0
conIigVersion 'CLDC-1.0
2. Ubah StarShipBattle constructor untuk mendapatkan Atribut Microedition-ProIile dan
Microedition-ConIiguration dari Iile JAD.
3. Dalam constructor, bandingkan setting dengan atribut yang terdapat pada langkah 1.
Jika settingnya sama, lalu keluarkan inIormasi ke console
Jika settingnya tidak sama, lalu matikan aplikasi. Panggil destroyAPP() yang
diikuti oleh notiIiedDestroy() untuk mematikan aplikasi dengan sempurna.
Riyanto Sigit
Wiratmoko Yuwono
4
2.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Latihan 1- Membuat class dimana class tersebut merupakan Extend dari MIDlet class
Program 2-1 adalah contoh membuat class dimana class tersebut merupakan Extend dari MIDlet
class
import javax.microedition.midlet.*;
public class StarShipBattle extends MIDlet
public StarShipBattle()
System.out.println("Loading the application...");
}
public void startApp()
System.out.println("in the startApp()");
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
Riyanto Sigit
Wiratmoko Yuwono
5
Latihan 2- Memeriksa sebuah device apakah dapat berjalan pada sebuah MIDlet
Program 2-2 adalah contoh Memeriksa sebuah device apakah dapat berjalan pada sebuah MIDlet
import javax.microedition.midlet.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
destroyApp(true);
notiIyDestroyed();
}
}
public void startApp()
System.out.println("in the startApp()");
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
}
Riyanto Sigit
Wiratmoko Yuwono
6
4.1. Tujuan:
Mahasiswa dapat mendisplay pesan pada MIDlet Screen, Mengimplementasikan
input user interIace, Menangani input user lewat Item state changes, Menguji data
Iorm menggunakan command object, dan Mengimplementasikan sistem menu
4.2. Latihan:
Mengembangkan menu utama pada game, mengembangkan user input screen,
mengimplementasikan ItemStateListener interIace, membuat command object dan menempatkan
Iorm userInput pada UserOptions klas, mengimplementasikan menu sistem.
Adapun tujuan-tujuan dari latihan ini adalah :
1. Untuk mulai pengembangan Starshipbattle 2004 game. Menu utama yang dikembangkan
terdiri dari tiga aneka pilihan yaitu :
Start Game
Set Options
End Game
Pada latihan berikutnya bisa menambahkan Iungsi untuk masing-masing pilihan menu. Tiap
item menu yang ditunjukkan kepada user disimpan dalam String|| array.
2. Untuk mengembangkan user input screen yang membolehkan para user untuk memasukkan
nama dan nicknamenya. Aplikasi harus memajang Iorm pada user untuk entri data ketika
user memilih set options dari layar menu utama. Di latihan berikutnya menambahkan Iungsi
untuk menyimpan dan mendapatkan inIormasi.
3. Untuk mengimplementasikan interIace ItemStateListener. InterIace ItemStateListener
berpengaruh pada Iorm UserOptions yang dibuat pada latihan sebelumnya untuk
Praktikum
3
Membuat High-Level
User Interface
Riyanto Sigit
Wiratmoko Yuwono
7
memberitahu perubahan-perubahan pada user. Pemberitahuan ini dikenalkan dalam Iorm
Alert object pada display.
4. Untuk membuat command object dan menempatkan Iorm UserInput pada klas UserOptions.
Kita juga dapat mengimplementasikan interIace command listener untuk menghubungkan
kejadian yang disebabkan ketika user invoke command. Dalam latihan ini interIace
ItemStateListener memberitahukan user ketika data berubah pada Iorm userOptions. Dengan
implmentasi ini user diberitahu perubahan setiap kali key ditekan. Implementasi ini tidak
praktis dan kemungkinan besar menganggu para user ketika mereka mengubah inIormasi
pada Iorm userInput.
5. Untuk mengimplementasikan Iungsi yang dibutuhkan untuk melengkapi menu system game
StarShipBattle 2004. Kita juga dapat mengubah userOptions klas untuk mengijinkan user
kembali ke menu utama.
3.3. Persiapan:
Untu menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Latihan 1- Memperlihatkan pesan pada MIDlet Screen
Copy Iile pada lokasi direktori ..\apps\Lab2_Exercise2\src dan ikuti step ini:
1. Tetapkan klas baru yang disebut klas MainMenu yang berisi unsure-unsur untuk menu
layar. Menu utama harus berisi properties dan atribut berikut :
Properties :
String|| menuList Tunjukkan masing-masing menu item dan menyimpan teks
string berikut :
Start Game
Set Options
End Game
List Menu adalah daItar screen object yang ditempatkan pada display untuk
user.
Display deviceDisplay adalah display object yang digunakan tempat atribut
menuList pada display.
Constructor MainMenu(Display d)
Riyanto Sigit
Wiratmoko Yuwono
8
Ini adalah deIault constructor yang digunakan untuk inisial properties pada class
MainMenu. Display object yang dilewati sebagai parameter yang disimpan di
mainDisplay property ketika kita meList object, set tipe untuk pilihan IMPLICIT.
Method showMenu()
Metode ini mengimplementasikan Iungsi yang diperlukan untuk tempat atribut
menuList pada peralatan display.
2. Untuk mengubah StarShipBattle class, ikuti langkah-langkah berikut :
a. Import paket javax.microedition.lcdui
b. Panggil showMenu() method dari dalam startApp() untuk instantiate dan display
MainMenu object
Latihan 2- Mengimplementasikan user input interface
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Copy Iile pada lokasi direktori ..\apps\Lab3_Exercise1\src dan ikuti step ini:
1. Tetapkan class UserOptions dengan mengikuti properties, constructor dan method :
Properties :
Form inputForm mengatur input component
TextField name mengijinkan user untuk memasukkan nama lengkap mereka
menggunakan berbagai karakter.
TextField alias mengijinkan user untuk memasukkan nama alias
menggunakan berbagai karakter.
Diplay deviceDisplay memelihara reIerensi untuk mendisplay peralatan
untuk mendukung kemampuan untuk display object inputForm user.
Constructor UserOptions(Display d)
Inisial contructor dan membuat object inputForm. Display object yang dilewati
untuk contructor disimpan dalam deviceDisplay property.
Method showUserOpt()
Method di set pada object inputForm sebagai display object sekarang.
Riyanto Sigit
Wiratmoko Yuwono
9
2. Membuat perubahan pada StarShipBattle class berikut :
a. Berikan komentar kode dalam method startApp()yang diinisialisasi dan displays
MainMenu
b. Deklarasikan dan inisialisasi object UserOptions.
c. Panggil method showUserOpt().
Latihan 3- Memasukkan user input melalui user item
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Mengimplementasikan interIace ItemStateListener
Copy Iile pada lokasi direktori ..\apps\Lab3_Exercise2\src dan modiIikasi UserOptions klas
untuk implementasi interIace ItemStateListener dengan mengikuti step ini:
1. DeIinisikan dengan mengikuti empat properties baru dalam klas UserOptions :
String nameAlertText string dari text yang dipertunjukkan pada user ketika
nilai nama object TextField berubah
String aliasAlertText string dari text yang diperkenalkan pada user ketika nilai
alias object TextFiled berubah.
Image okImage Image object yang diperkenalkan pada user di object Alert.
Alert updateAlert Alert object yang ditunjukkan ketika inIormasi di inputForm
berubah.
2. Ubah UserOptions(Diplay d) constructor sebagai berikut :
a. Tambahkan Iungsi untuk menjalankan Iile okImage. Image disimpan di Iile
labdir\res\dukeok8.png
b. Tambahkan Iungsi untuk membuat instance updateAlert yang mempunyai properties :
Title : Data Changed
AlertText : null
Image : okImage
Alert Type : AlertType.CONFIRMATION
Set updateAlert timeout menjadi Alert.FOREVER
Register inputForms ItemStateListener untuk the UserOptions class
3. DeIinisikan dengan mengikuti empat properties baru dalam klas UserOptions :
Riyanto Sigit
Wiratmoko Yuwono
10
String nameAlertText string dari text yang dipertunjukkan pada user ketika nilai
nama object TextField berubah
String aliasAlertText string dari text yang diperkenalkan pada user ketika nilai alias
object TextFiled berubah.
Image okImage Image object yang diperkenalkan pada user di object Alert.
Alert updateAlert Alert object yang ditunjukkan ketika inIormasi di inputForm
berubah.
Latihan 4- Menguji data form menggunakan command object
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
MemodiIikasi UserOptions Class.
Copy Iile pada lokasi direktori ..\apps\Lab3_Exercise3\src. Ubah implementasi interface untuk
interface CommandListener dan ikuti step ini:
1. Tambahkan properties berikut :
a. Tambahkan perintah saveData property.
Propertis ini menghadirkan perintah memilih user ketika mengisikan data lengkap pada
Iorm.
b. Tambahkan String saveAlertText propery dan set nilai string menjadi 'Data Save.
2. Di UserOptions(Display d) contructor, In the UserOptions(Display d) contructor,
laksanakan step ini :
a. instantiate adalah hal dari perintah saveData menggunakan properties berikut :
Label: Save
Command Type : Command OK
Priority : 1
b. Tambahkan perintah objek saveDataAdd untuk objek inputForm.
c. DaItarkan UserOptions class sebagai perintah listener untuk objek inputForm.
d. Berikan komentar untuk program yang memanggil setItemStateLsitener() method.
3. Tambahkan method commandAction(Command c, Displayable d) pada UserOptions class,
dan ikuti langkah berikut :
a. Uji perintah yang dilewati dan jika sama dengan perintah saveData lalu set teks
updateAlert menjadi saveAlertText.
Riyanto Sigit
Wiratmoko Yuwono
11
b. Panggil method showAlertUpdate()pada display alert.
4. Berikan komentar pada method itemStateChanged(Item i)
Latihan 5- Mengimplementasikan system menu
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Pada latihan ini, lengkapi tugas berikut :
Implementasikan menu system menggunakan List screen dan Command objek.
Implementasikan menu system menggerakkan antar screen.
Untuk melengkapi latihan ini ubah klas mainMenu untuk :
Display objek Alert ketika user memilih menu Start pada game.
Display UserInput screen ketika user memilih menu Set option.
Exit aplikasi ketika user memilih menu Exit pada game
Tugas 1 - Mengimplementasikan sistem menu menggunakan List Screen dan Command
object.
Copy Iile pada lokasi direktori ..\apps\Lab3_Exercise4\src dan ikuti step ini:
1. Ubahlah klas MainMenu untuk mengimplementasikan CommandListener interIace
2. Hilangkan menuList|| array property
3. Tambahkan properties berikut :
Command startGame
Command setOptions
Command exitGame
Alert loadingGameAlert
Gauge loadingGameGauge
UserOptions optionForm
StarShipBattle ssb
4. Di MainMenu contructor, laksanakan perintah berikut :
a. Hilangkan menuList array
b. Mengubah menuList instantiation hanya lewat Title dan Type
c. Instantiate pada tiga Command properties dengan menyediakan Titles, Command
types and Priorities
d. Tambahkan Command properties untuk menu property
Riyanto Sigit
Wiratmoko Yuwono
12
e. Instantiate loadingGameGauge property demean mengikuti parameter berikut :
Title : null
Interactive : Ialse
Max Value: Gauge.INDEFINITE
Initial Value: Gauge.CONITONOUSRUNNING
I. set preIerred size dari loadingGameGuage property to -1,-1
g. Instantiate loadingAlert dengan mengikuti parameter berikut :
Title : Loading Game
Alert Text : Loading StarShipBattle 2004, Please Standby..
h. Set menu command listener untuk MainMenu object
i. Beri tanda StarShipBattle parameter yang dilewati variable ssb
j. Instantiate objek UserOptions.
5. Tambahkan actionCommand(Command c, Displayable d). Metode ini seharusnya menguji
command object antara masing-masing menu dan mengambil jalan yang tepat dari action
sebagai berikut :
Start Game Generate alert dan beritahukan user bahwa game sedang loading.
LoadingGameGauge object ditunjukkan sebagai bagian dari alert.
Set Options Triggers mengubah untuk display UserOptions screen
Exit Game Mintakan matikan game yang baik dengan memanggil shutdown()
method pada StarShipBattle object.
6. Buat perubahan sebagai berikut untuk starApp() method pada StarShipBattle class:
a. Memperoleh reIerensi untuk device display
b. Instantiate MainMenu object
c. Panggil showMenu() method pada MainMenu object.
7. Tambahkan shutdown() method
Mengimplementasikan metode ini sebaiknya matikan aplikasi dengan permintaan.
Riyanto Sigit
Wiratmoko Yuwono
13
Tugas 2 - Mengimplementasikan sistem menu untuk menggerakkan antara screen.
Ubahlah UserOptions class untuk mengijinkan user kembali ke menu utama. Klas ini di
implementasikan begitu setelah Alert Object memberitahukan perubahan pada user, maka
aplikasi kembali pada menu utama. Untuk melengkapi Iungsi ini, UserOptions class harus
mempunyai reIerensi untuk MainMenu class. Buat perubahan UserOption class sebagai berikut :
1. Tambahkan property sebagai berikut :
Displayable mainMenu
2. Tambahkan metode sebagai berikut :
Public void registerMenu(Displayable mm)
Implementasi pada metode ini seharusnya mengambil parameter MainMenu dan
memberikannya untuk mainMenu property dinyatakan pada Step 1.
3. Di showUpdateAlert() method, ubah parameter ke dua menjadi setCurrent() method
untuk mainMenu property
4. Pada MainMenu class contructor, setelah kita membuat userOptions object, panggillah
registerMenu() method menggunakan ini sebagai parameter.
Riyanto Sigit
Wiratmoko Yuwono
14
3.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Latihan 1- Memperlihatkan pesan pada MIDlet Screen
Program 3-1 adalah contoh Iile MainMenu.java
import javax.microedition.lcdui.*;
public class MainMenu
private String|| menuList "Start Game",
"Set Options",
"End Game" };
private List menu;
private Display deviceDisplay;
public MainMenu(Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT, menuList, null);
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
Riyanto Sigit
Wiratmoko Yuwono
15
Program 3-2 adalah contoh Iile StarShipBattle.java.
import javax.microedition.midlet.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
destroyApp(true);
notiIyDestroyed();
}
}
public void startApp()
System.out.println("in the startApp()");
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
}
Riyanto Sigit
Wiratmoko Yuwono
16
Latihan 2- Mengimplementasikan user input interface
Program 3-3 adalah contoh Iile UserOptions.java
import javax.microedition.lcdui.*;
public class UserOptions
private Form inputForm;
private TextField name;
private TextField nickname;
private Display deviceDisplay;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
nickname new TextField("Nickname", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(nickname);
deviceDisplay d;
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
17
Program 3-4 adalah contoh Iile StarShipBattle.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
destroyApp(true);
notiIyDestroyed();
}
}
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
//MainMenu mm new MainMenu(d);
//mm.showMenu();
UserOptions uo new UserOptions(d);
uo.showUserOpt();
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
}
Riyanto Sigit
Wiratmoko Yuwono
18
Langkah 3- Memasukkan user input melalui user item
Program 3-5 adalah contoh Iile UserOption.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements ItemStateListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private Image okImage;
private Alert updateAlert;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null, okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
inputForm.setItemStateListener(this);
}
Riyanto Sigit
Wiratmoko Yuwono
19
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, inputForm);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
20
Langkah 4- Menguji data form menggunakan command object
Program 3-6 adalah contoh Iile UserOption.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Command saveData;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
Riyanto Sigit
Wiratmoko Yuwono
21
updateAlert new Alert("Data Changed", null, okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
/*
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
*/
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, inputForm);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
22
Latihan 5- Mengimplementasikan sistem menu
Program 3-7 adalah contoh Iile MainMenu.java.
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
}
Riyanto Sigit
Wiratmoko Yuwono
23
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI(c exitGame)
exitGame();
}
}
public void startGame()
loadingAlert.setImage(null);
loadingAlert.setIndicator(loadingGameGauge);
deviceDisplay.setCurrent(loadingAlert, menu);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
Riyanto Sigit
Wiratmoko Yuwono
24
Program 3-8 adalah contoh Iile UserOptions.java.
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
Riyanto Sigit
Wiratmoko Yuwono
25
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
/*
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
*/
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
26
Program 3-9 adalah contoh Iile StarShipBattle.java.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
MainMenu mm new MainMenu(this, d);
mm.showMenu();
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
Riyanto Sigit
Wiratmoko Yuwono
27
4.1. Tujuan:
Mahasiswa dapat membuat dan mengimplementasikan splash screen
menggunakan Canvas Class, serta dapat mengimplementasikan skip option dalam
splash screen
4.2. Latihan:
Membuat splash screen untuk game StarShip Battle 2004. Membuat subclass dari Canvas class,
mengimplementasikan metode paint() dan menampilkan canvas ke user. Implementasi Skip
Option pada Spash Screen
Class yang dibuat pada beban latihan ini menyediakan image splash screen dan
menghadirkannya di display. Di latihan berikutnya, Iungsi dari class meluas untuk
memungkinkan user melewati splash screen.
Adapun tujuan-tujuan dari latihan ini yaitu:
1. Untuk membuat splash screen baru
2. Untuk menambahkan Iungsi yang memungkinkan user untuk skip splash screen.
4.3. Persiapan:
Untuk menyiapkan latihan ini lakukan setting komputer pada lokasi direktori: labdir
Image yang digunakan pada latihan ini terletak pada lokasi labdir\lab4exercise\res directory
Latihan 1- Membuat Class Splash Screen Baru
Copy Iile pada lokasi direktori labdir\Lab3Exercise5\src dan ikuti step ini:
1. Buat class baru yang dipanggil SplashScreen class.
2. Tetapkan dua properties:
Praktikum
4
Membuat Low-Level
User Interface
Riyanto Sigit
Wiratmoko Yuwono
28
Image splashImage
MainMenu mainMenu
3. Tetapkan deIault constructor
Di metode ini memanggil loadSplashImage() yang menetapkan langkah berikutnya .
4. Tetapkan metode berikut :
loadSplashImage() metode ini di load titlepage.png Iile dan menyimpan image
di variable splashImage.
paint(Graphics g) Di metode ini, Implementasikan Iungsi untuk memberishkan
layar dan memindahkan splashImage pada screen.
5. Buat perubahan berikut di startApp() method pada StarShipBattle class:
a. Pindahkan panggilan pada metode menu utama showMenu()
b. Umumkan dan instantiate adalah dari SpalshScreen
c. Panggil setCurrent metode yang lewat SpalshScreen sebagai parameter
Latihan 2- Implementasi Skip Option pada Splash Screen
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Copy Iile pada lokasi direktori labdir\Lab4Exercise1\src dan ikuti step ini:
1. Tambahkan metode berikut pada SplashScreen class yang dibuat pada latihan
sebelumnya.
registerMenu(MainMenu m) Metode ini menyimpan parameter yang dilewati pada
mainMenu property. Parameter MainMenu menyediakan class SplashScreen demean
Display object yang user lihat ketika sembarang key ditekan.
keyPressed(int keyCode) Metode ini memungkinkan user untuk menggerakkan
splash screen diluar dan masuk pada menu utama.
2. Di dalam metode startApp() dari StarShipBattle class, panggil metode registerMenu() di
dalam SplashScreen class dan lewati MainMenu object.
Riyanto Sigit
Wiratmoko Yuwono
29
4.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Latihan 1- Membuat Class Splash Screen Baru
Program 4-1 adalah contoh SplashScreen.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private MainMenu mainMenu;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
}
Riyanto Sigit
Wiratmoko Yuwono
30
Program 4-2 adalah contoh StarShipBattle.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
MainMenu mm new MainMenu(this, d);
SplashScreen ss new SplashScreen();
d.setCurrent(ss);
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
Riyanto Sigit
Wiratmoko Yuwono
31
Program 4-3 adalah contoh MainMenu.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
}
Riyanto Sigit
Wiratmoko Yuwono
32
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI(c exitGame)
exitGame();
}
}
public void startGame()
loadingAlert.setImage(null);
loadingAlert.setIndicator(loadingGameGauge);
deviceDisplay.setCurrent(loadingAlert, menu);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
Riyanto Sigit
Wiratmoko Yuwono
33
Program 4-4 adalah contoh UserOptions.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
Riyanto Sigit
Wiratmoko Yuwono
34
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
/*
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
*/
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
35
Latihan 2- Implementasi Skip Option pada Splash Screen
Program 4-5 adalah contoh Iile SplashScreen.java.
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private MainMenu mainMenu;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
public void registerMenu(MainMenu mm)
mainMenu mm;
}
public void keyPressed(int keyCode)
mainMenu.showMenu();
}
}
Riyanto Sigit
Wiratmoko Yuwono
36
Program 4-6 adalah contoh Iile StarShipBattle.java.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
MainMenu mm new MainMenu(this, d);
SplashScreen ss new SplashScreen();
ss.registerMenu(mm);
d.setCurrent(ss);
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
Riyanto Sigit
Wiratmoko Yuwono
37
Program 4-7 adalah contoh Iile MainMenu.java.
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
}
Riyanto Sigit
Wiratmoko Yuwono
38
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI(c exitGame)
exitGame();
}
}
public void startGame()
loadingAlert.setImage(null);
loadingAlert.setIndicator(loadingGameGauge);
deviceDisplay.setCurrent(loadingAlert, menu);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
Riyanto Sigit
Wiratmoko Yuwono
39
Program 4-8 adalah contoh Iile UserOptions.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
Riyanto Sigit
Wiratmoko Yuwono
40
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
/*
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
*/
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
41
5.1. Tujuan:
Mahasiswa dapat membuat Iorm dan menambahkan CustomItem, Textbox dan Gauge
object untuk download game serta membuat game StarShipBattle 2004.
5.2. Latihan:
Adapun tujuan-tujuan dari latihan ini yaitu:
1. Untuk membuat CustomItem object yang memajang kata rahasia pada user
2. Untuk membuat class yang menempatkan kata rahasia pada Iorm
Membuat Iorm yang menghadiahi user demean SecretWordItem class adalah simple CustomItem
yang sebelumnya digunakan user dengan password rahasia. User harus mengetik password ke
dalam Iield text dan jika sukses, user diperbolehkan menggerakkan menu utama aplikasi.
5.3. Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Latihan 1- Membuat form dan menambahkan CustomItem, Textbox dan Gauge object
untuk download game
Tugas 1 - Membuat CustomItem Object yang didisplay dalam SecretWord untuk user
Copy Iile pada lokasi direktori dari labdir\Lab4Exercise2\src ke labdir\Lab5Exercise1\src dan
ikuti step ini:
1. Deklarasikan class baru, disebut SecretWordItem class, yang meluas pada CustomItem
class yang dideIiniskan di dalam javax.microedition.lcdui package.
2. Deklarasikan String secretWord property
Properti ini sebelumnya adalah word yang di display untuk user.
Praktikum
5
Pengembangan High dan
Low Level User Interface
Riyanto Sigit
Wiratmoko Yuwono
42
3. Deklarasikan metode berikut:
int getMinContentWidth() Kembali ke lebar minimum width didalam isi objek area
CustomItem.
int getMinContentHeight() Kembali ke tinggi minimum didalam isi objek
CustomItem.
int getPreIContentHeight(int height) Kembali ke objek CustomItem berisi tinggi
minimum.
int getPreIContentWidth(int width) Kembali ke objek CustomItem berisi lebar
minimum.
void paint(graphics g,int w,int h) Melukis secretWord property pada layar didalam
lukisan segiempat.
boolean checkWord(String word) Bandingkan parameter word dengan secretWord
property
Jika words cocok, bernilai nilai true sebaliknya Ialse.
Tugas 2 - Membuat class yang menempatkan Secret WordOnaForm
Setelah membuat objek CustomItem yang memajang secret word untuk user, maka harus
membuat class lain yang menempatkan secret word pada Iorm dan juga menyediakan Iungsi
yang memungkinkan user untuk memasukkan word dan mengujinya. Lengkapi step berikut :
1. Desain Iorm yang mempunyai TextField pada SecretWordItem dan command object.
Ketika user menekan command object, bandingkan Iorm string ke text yang memasukkan
user dengan string ke text display oleh SecretWordItem object. Jika text string cocok, lalu
dilanjutkan ke menu screen.
ModiIikasi klas SplashScreen sehingga yang mendaItarkan adalah LoginForm objek dan
MainMenu objek
ModiIikasi SplashScreen objek sehingga yang didisplay ke LoginForm objek ketika key
ditekan.
ModiIikasi metode StarShipBattle startApp() sedemikian sehingga yang membuat
LoginForm objek dan membuat yang ada untuk SplashScreen objek.
Riyanto Sigit
Wiratmoko Yuwono
43
Latihan 2- Membuat Game StarShipBattle 2004
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Copy Iile pada lokasi direktori labdir\Lab5Exercise1\src ke labdir\Lab5Exercise2\src dan ikuti
step ini:
DeIinisikan class baru , disebut Battle, yang subclass dari GameCanvas class dan
implementasi Runnable interIace.
DeIinisikan properties yang mengikuti Battle class berikut:
- TiledLayer backgrnd objek sebelum latar belakang image untuk game.
- LayerManager lmgr objek ini adalah objek yang mengatur display image.
- Sprite ship objek sebelum hero ship
- Sprite enemy objek sebelum enemy ship
- Display deviceDisplay objek berisi reIerensi untuk device display
- Screen mainMenu objek sebelum reIerensi untuk mengikuti user kembali ke Menu
System.
- Boolean running variable konrtrol digunakan untuk mengatur game processing
Thread
DeIinisi mengikuti metode di dalam Battle class:
- public Battle(Display d, Screen m) Ini adalah deIault constructor. Ketika objek
Battle dibuat, kamu harus menginisialisasi semua graIik.
- Public void initSprites Lengkapi metode dengan tindakan berikut:
a. Loads the enemy dan hero images
b. Sets ships position didalam lapangan bermain.
c. DeIinisikan segi empat pada enemy ship
- void stop() metode ini disebut kejadian yang mengancam game membutuhkan
untuk diberhentikan oleh setting variable berjalan ke Ialse.
- void start() Lengkapi metode berikut ini:
a. Set running variable ke true
b. Buat ancaman baru
c. Starts the game loop
- void run() Ini adalah game looping yang harus selesai pada logika berikut :
Riyanto Sigit
Wiratmoko Yuwono
44
a. Periksa variable kendali dan apabila benar, lanjutkan eksekusi pada loop.
Sebaliknya game over dan proses game berhenti.
b. Queri keystates. Jika user menekan tombol petunjuk kiri atau kanan lalu kapal
juga bergerak ke kiri atau kanan.
c. Otomatis bergerak ke kapal musuh sepanjang layar lima pixels screen Iive pixels
d. Lihat kemungkinan benturan antar kapal.
e. Lukis kapal pada display.
Isyarat: Pertimbangkan penempatan yang strategis |sebut/panggil/hubungi| kepada
|itu| tidur metoda.
Isyarat: Pertimbangkan penempatan strategi panggilan pada sleep method.
metoda ini digunakan oleh pengulangan/jerat game untuk mengkonversi kapal |itu|
untuk dibinasakan gambaran dan kemudian tidur untuk satu |yang| kedua. Setelah
benang/ulir start lagi, gambaran dipugar dan digantikan pada startup posisi mereka.
- void destroyShips() Metode ini digunakan oleh loop game yang dikeonversikan
pada kapal untuk mengganti image dan lalu tertidur beberapa detik. Setelah ancaman
start lagi, image dimusnahkandan diganti demean starup posisi mereka.
Di dalam klas MainMenu, deIinisi property yang sebelum kejadian pada klas Battle.
Ubah constructor pada MainMenu untuk membuat kejadian klas Battle dan
menyimpannya di dalam property yang sudah ditetapkan pada step 4.
Ubah startGame pada MainMenu untuk memanggil Battle.start() dan menempatkan klas
Battle pada device display.
Riyanto Sigit
Wiratmoko Yuwono
45
5.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Latihan 1- Membuat form dan menambahkan CustomItem, Textbox dan Gauge object
untuk download game
Program 5-1 adalah contoh SecretWordItem.java
import javax.microedition.lcdui.*;
public class SecretWordItem extends CustomItem
private String secretWord "Cubs";
public SecretWordItem()
super("PassCode Prompt");
}
public int getMinContentWidth() return 100; }
public int getMinContentHeight() return 20; }
public int getPreIContentWidth(int width)
return getMinContentWidth();
}
public int getPreIContentHeight(int height)
return getMinContentHeight();
}
public void paint(Graphics g, int w, int h)
g.setColor(0,0,255);
g.IillRect(0,0, w -1, h- 1);
g.setColor(255,255,255);
g.drawString(secretWord, 50,0, g.TOP,g.HCENTER);
}
Riyanto Sigit
Wiratmoko Yuwono
46
Program 5-2 adalah contoh SplashScreen.java
public boolean checkWord(String word)
boolean result Ialse;
iI (secretWord.equals(word))
result true;
}
return result;
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private LoginForm login;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
public void registerLogin(LoginForm lI)
login lI;
}
Riyanto Sigit
Wiratmoko Yuwono
47
Program 5-3 adalah contoh LoginForm.java
public void keyPressed(int keyCode)
login.showLoginForm();
}
}
import javax.microedition.lcdui.*;
public class LoginForm implements CommandListener
private SecretWordItem swi;
private Form loginForm;
private TextField userEntry;
private Display deviceDisplay;
private MainMenu mainMenu;
private Command enter;
public LoginForm(Display d )
deviceDisplay d;
loginForm new Form("Login");
swi new SecretWordItem();
userEntry new TextField("Password", null, 25, TextField.ANY);
enter new Command("Enter", Command.OK, 1);
loginForm.append(swi);
loginForm.append(userEntry);
loginForm.addCommand(enter);
loginForm.setCommandListener(this);
}
public void registerMenu(MainMenu menu)
mainMenu menu;
}
public void showLoginForm()
deviceDisplay.setCurrent(loginForm);
}
Riyanto Sigit
Wiratmoko Yuwono
48
Program 5-4 adalah contoh MainMenu.java
public void showMenu()
mainMenu.showMenu();
}
public void commandAction(Command c, Displayable d)
iI (swi.checkWord(userEntry.getString()))
showMenu();
}else
Alert err new Alert("Invalid Password!", "Invalid Password\n Please try
again", null, AlertType.ERROR);
err.setTimeout(Alert.FOREVER);
deviceDisplay.setCurrent(err, loginForm);
}
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions; }
public void registerMenu(MainMenu menu)
mainMenu menu;
}
public void showLoginForm()
deviceDisplay.setCurrent(loginForm);
}
Riyanto Sigit
Wiratmoko Yuwono
49
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
}
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI(c exitGame)
exitGame();
}
}
Riyanto Sigit
Wiratmoko Yuwono
50
Program 5-5 adalah contoh StarShipBattle.java
public void startGame()
loadingAlert.setImage(null);
loadingAlert.setIndicator(loadingGameGauge);
deviceDisplay.setCurrent(loadingAlert, menu);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
Riyanto Sigit
Wiratmoko Yuwono
51
Program 5-6 adalah contoh UserOptions.java
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
LoginForm lI new LoginForm(d);
MainMenu mm new MainMenu(this, d);
SplashScreen ss new SplashScreen();
lI.registerMenu(mm);
ss.registerLogin(lI);
d.setCurrent(ss);
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
Riyanto Sigit
Wiratmoko Yuwono
52
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
Riyanto Sigit
Wiratmoko Yuwono
53
/*
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
*/
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
54
Latihan 2- Membuat Game StarShipBattle 2004
Program 5-7 adalah contoh Iile Battle.java.
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
public class Battle extends GameCanvas implements Runnable
private TiledLayer backgrnd;
private LayerManager lmgr;
private Sprite ship;
private Sprite enemy;
private Display deviceDisplay;
private MainMenu menu;
private boolean running Ialse;
public Battle(Display s, MainMenu m)
super(true);
deviceDisplay s;
menu m;
lmgr new LayerManager();
try
Image bkImage Image.createImage("/background.png");
backgrnd new TiledLayer(7,8,bkImage,20,20);
backgrnd.setPosition(20,12);
int map|| 1,2,3,4,1,2,3,
2,4,3,1,4,3,1,
4,3,2,1,1,2,4,
2,3,4,1,2,3,1,
3,4,1,2,3,1,4,
2,4,3,1,4,3,1,
4,1,2,3,1,3,4,
2,3,1,4,2,2,1 };
Ior (int i 0; i map.length; i)
int col i7;
int row (i-col) /7;
backgrnd.setCell(col,row,map|i|);
}
Riyanto Sigit
Wiratmoko Yuwono
55
}catch(IOException ioe)
System.out.println("ERR:Loading Image");
}
initSprites();
lmgr.append(backgrnd);
lmgr.insert(ship,0);
lmgr.insert(enemy,0);
Graphics g getGraphics();
lmgr.paint(g,0,0);
IlushGraphics();
}
public void initSprites()
try
Image shipImage Image.createImage("/starshipline.png");
ship new Sprite(shipImage, 30,30);
ship.setFrame(1);
ship.setPosition(70,130);
Image enemyImage Image.createImage("/alienb.png");
enemy new Sprite(enemyImage,30,30);
enemy.setFrame(1);
enemy.setPosition(70,15);
}catch(IOException ioe)
System.out.println("ERR: Generating Sprite");
}
}
public void stop()
running Ialse;
}
public void start()
System.out.println("Starting the game thread");
running true;
Thread t new Thread(this);
t.start();
}
Riyanto Sigit
Wiratmoko Yuwono
56
public void run()
System.out.println("In the game loop");
Graphics g getGraphics();
int ks 0;
int currentX 0;
lmgr.paint(g,0,0);
IlushGraphics();
while (running)
ks getKeyStates();
currentX ship.getX();
ship.setFrame(1);
iI ((ks & LEFTPRESSED) ! 0)
iI((currentX-5) ~20)
ship.setFrame(0);
ship.move(-5,0);
}
}else iI((ks & RIGHTPRESSED) !0)
iI((currentX5) 130)
ship.setFrame(2);
ship.move(5,0);
}
}else iI((ks & GAMEAPRESSED) ! 0)
stop();
}
iI((enemy.getY() 5) 140)
enemy.move(0,5);
iI(enemy.collidesWith(ship,true))
destroyShips();
}
}else
enemy.setPosition(70,15);
}
lmgr.paint(g,0,0);
IlushGraphics();
try
Thread.sleep(100);
}catch(InterruptedException ie)}
}
Riyanto Sigit
Wiratmoko Yuwono
57
Program 5-8 adalah contoh Iile MainMenu.java.
System.out.println("Leaving the game loop");
menu.showMenu();
}
private void destroyShips()
Graphics g getGraphics();
enemy.setFrame(3);
ship.setFrame(4);
lmgr.paint(g, 0,0);
IlushGraphics();
try
Thread.sleep(1000);
}catch(InterruptedException ie)}
enemy.setFrame(1);
enemy.setPosition(70,15);
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
private Battle gameEngine;
Riyanto Sigit
Wiratmoko Yuwono
58
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
gameEngine new Battle(d, this);
}
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI(c exitGame)
exitGame();
}
}
Riyanto Sigit
Wiratmoko Yuwono
59
Program 5-9 adalah contoh Iile StarShipBattle.java.
public void startGame()
gameEngine.start();
deviceDisplay.setCurrent(gameEngine);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
Riyanto Sigit
Wiratmoko Yuwono
60
Program 5-10 adalah contoh Iile UserOptions.java.
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
LoginForm lI new LoginForm(d);
MainMenu mm new MainMenu(this, d);
SplashScreen ss new SplashScreen();
lI.registerMenu(mm);
ss.registerLogin(lI);
d.setCurrent(ss);
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
Riyanto Sigit
Wiratmoko Yuwono
61
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
Riyanto Sigit
Wiratmoko Yuwono
62
Program 5-11 adalah contoh Iile SplashScreen.java
/*
public void itemStateChanged(Item i)
iI( i name)
updateAlert.setString(nameAlertText);
}else
updateAlert.setString(aliasAlertText);
}
showAlertUpdate();
}
*/
private void showAlertUpdate()
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
deviceDisplay.setCurrent(inputForm);
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private LoginForm login;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
Riyanto Sigit
Wiratmoko Yuwono
63
Program 5-12 adalah contoh Iile LoginForm.java
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
public void registerLogin(LoginForm lI)
login lI;
}
public void keyPressed(int keyCode)
login.showLoginForm();
}
}
import javax.microedition.lcdui.*;
public class LoginForm implements CommandListener
private SecretWordItem swi;
private Form loginForm;
private TextField userEntry;
private Display deviceDisplay;
private MainMenu mainMenu;
private Command enter;
public LoginForm(Display d )
deviceDisplay d;
loginForm new Form("Login");
swi new SecretWordItem();
userEntry new TextField("Password", null, 25, TextField.ANY);
enter new Command("Enter", Command.OK, 1);
loginForm.append(swi);
loginForm.append(userEntry);
loginForm.addCommand(enter);
loginForm.setCommandListener(this);
}
Riyanto Sigit
Wiratmoko Yuwono
64
public void registerMenu(MainMenu menu)
mainMenu menu;
}
public void showLoginForm()
deviceDisplay.setCurrent(loginForm);
}
public void showMenu()
mainMenu.showMenu();
}
public void commandAction(Command c, Displayable d)
iI (swi.checkWord(userEntry.getString()))
showMenu();
}else
Alert err new Alert("Invalid Password!", "Invalid Password\n
Please try again", null, AlertType.ERROR);
err.setTimeout(Alert.FOREVER);
deviceDisplay.setCurrent(err, loginForm);
}
}
}
Riyanto Sigit
Wiratmoko Yuwono
65
6.1. Tujuan:
Setelah selesai praktikum ini, kita dapat mengimplementasikan option Screen, Save dan
mengubah data di obyek RecordStore.
6.2. Latihan:
Mengimplementasikan option Screen, Save dan mengubah data di obyek RecordStore.
Pada latihan ini kita dapat menyelesaikan langkah-langkah sbb:
Mengimplementasikan option Screen
Save dan mengubah data di obyek RecordStore
Tujuan dari latihan ini adalah untuk menambah Iungsi dan mengubah data pada option Screen
dari obyek RecordStore. Pada latihan ini diasumsikan membuat:
Obyek RecordStore tidak pernah berisi satu record.
Record dilewatkan obyek melalui array seperti byte||.
Obyek RecordStore dibuka untuk obyek yang digunakan.
Obyek RecordStore harus ditutup ketika menghapus obyek.
6.3. Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah 1-Implementasi Option Screen
Copy Iile pada lokasi direktori ..\apps\Lab5_Exercise2\src dan ikuti step ini:
1. Membuat sebuah class OptionRS.
2. MendeIinisikan tiga property:
Praktikum
6
Menggunakan Data
pada Peralatan
Riyanto Sigit
Wiratmoko Yuwono
66
String storeName Merepresentasikan nama yang digunakan untuk membuka obyek
RecordStore.
RecordStore optionStore Sebuah reIeren dari RecordStore yang menyimpan
inIormasi.
byte|| currentOption Memelihara duplikat dari option yang ada pada sekumpulan
options RecordStore.
3. MendeIinisikan Constructor
Mengimplementasikan contructor untuk membuka obyek RocordStore dan mengisi
properti optionStore.
4. MendeIinisikan methods
byte|| readOption() Mengecek currentOption apakah bernilai null jika curentOption
bernilai null maka implementasikan perbaikan option dari optionStore kemudian
mengembalikan nilai currentOption.
void writeOption(byte|| option) Mengecek jumlah record di properti optionStore.
Jika jumlah record tidak sama dengan satu maka record baru ditambah. Jika record
sama dengan satu maka record diupdate dimana nilai 1 dilewatkan ketika dipanggil.
boolean recordExists() mengembalikan true jika satu record ada dan false jika
record tidak ada.
void close() Menutup property optionStore setelah selesai digunakan.
Langkah 2-Menyimpan dan Memperbaiki Data Obyek RecordStore
Pada langkah ini, kita modiIikasi class UserOption untuk menggunakan obyek optionRS untuk
menyimpan dan memperbaiki data.
1. Tambahkan properti OptionsRS optionStore untuk klas userOption:
Properti ini akan memelihara sebuah reIeren untuk obyek OptionRS yang akan digunakan
untuk memperbaiki dan menyimpan data.
2. Tambahkan methods untuk class UserOptions
void initializeOptions() Membuat instant dari obyek OptionRS dan set property
optionStore. Setelah action lengkap, methods dicek untuk melihat keberadaan record,
jika tidak set deIault dan simpan dalam obyek optionStore.
Riyanto Sigit
Wiratmoko Yuwono
67
Void saveOption() Konversi dan tambahkan nilai penyimpanan dalam nama dan
obyek TextField dari String untuk sebuah array byte||. Setelah nilai dikonversi, array
byte|| dilewatkan parameter pada methods writeOption() oleh property optionStore.
Void retrieveOption() Memperbaiki sebuah array byte|| yang berisi nilai untuk
nama dan nilai TextIield yang digunakan methods retrieveOptions() yang diberikan
oleh property optionStore.. Array byte|| dikonversi untuk dua String dan tiap nilai
dimasukkan ke obyek TextField.
3. Tambah methods initializeOptions() dari deIault konstruktor.
4. Tambah method saveOption dari metods ShowAllertUpdate()
5. Tambah methods retrieveOption dari methods showUserOpt().
6.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Program 6-1 adalah contoh Iile OptionRS.java.
import javax.microedition.rms.*;
import java.io.*;
public class OptionsRS
private String storeName "StarShipOptions";
private RecordStore optionStore;
private byte|| currentOption;
public OptionsRS()
try
optionStore RecordStore.openRecordStore(storeName,true);
}catch(Exception ioe)
System.out.println("ERR: Opening RecordStore");
}
}
Riyanto Sigit
Wiratmoko Yuwono
68
public byte|| readOption()
try
iI(currentOption null)
currentOption optionStore.getRecord(1);
}
}catch(Exception e)
System.out.println("ERR: reading options");
}
return currentOption;
}
public void writeOption(byte|| option)
try
iI(recordExists())
optionStore.setRecord(1, option,0,option.length);
}else
optionStore.addRecord(option,0, option.length);
}
}catch(Exception e)
System.out.println("ERR: saving options");
}
currentOption option;
}
public boolean recordExists()
boolean response true;
try
iI (optionStore.getNumRecords() !1 )
return Ialse;
}
}catch(RecordStoreException rse)
System.out.println("ERR:OPTIONRS:unable to read the number oI
records");
response Ialse;
}
return response;
}
public void close()
try
optionStore.closeRecordStore();
}catch(Exception e)
System.out.println("ERR: Closing RecordStore");
}
}
}
Riyanto Sigit
Wiratmoko Yuwono
69
Program 6-2 adalah contoh Iile UserOptions.java.
import javax.microedition.lcdui.*;
import java.io.*;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
private OptionsRS optionStore;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
initializeOptions( );
}
private void initializeOptions( )
optionStore new OptionsRS( );
iI(!optionStore.recordExists())
name.setString("Joe Smith");
alias.setString("BattleMaster");
saveOptions();
}
}
Riyanto Sigit
Wiratmoko Yuwono
70
private void retrieveOptions()
try
ByteArrayInputStream bOptions new
ByteArrayInputStream(optionStore.readOption());
DataInputStream dOptions new DataInputStream(bOptions);
name.setString(dOptions.readUTF());
alias.setString(dOptions.readUTF());
dOptions.close();
bOptions.close();
}catch(IOException ioe)
System.out.println("ERR:USEROPTIONS: problem retrieving data");
}
}
private void saveOptions()
try
ByteArrayOutputStream bOptions new ByteArrayOutputStream();
DataOutputStream dOptions new DataOutputStream(bOptions);
dOptions.writeUTF(name.getString());
dOptions.writeUTF(alias.getString());
optionStore.writeOption(bOptions.toByteArray());
dOptions.close();
bOptions.close();
}catch(IOException ioe)
System.out.println("ERR:USEROPTIONS: problem saving data");
}
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
private void showAlertUpdate()
saveOptions();
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
retrieveOptions();
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
71
Program 6-3 adalah contoh Iile MainMenu.java.
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
private Battle gameEngine;
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
gameEngine new Battle(d, this);
}
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI(c exitGame)
exitGame();
}
}
Riyanto Sigit
Wiratmoko Yuwono
72
Program 6-4 adalah contoh Iile SplashScreen.java.
public void startGame()
gameEngine.start();
deviceDisplay.setCurrent(gameEngine);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
public void showMenu()
deviceDisplay.setCurrent(menu);
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private LoginForm login;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
public void registerLogin(LoginForm lI)
login lI;
}
public void keyPressed(int keyCode)
login.showLoginForm();
}
}
Riyanto Sigit
Wiratmoko Yuwono
73
7.1. Tujuan:
Setelah selesai praktikum ini, kita dapat menggunakan interIace HttpConection dan
membaca teks pada aplikasi help screen.
7.2. Latihan: Menggunakan interface HttpConection dan membaca teks pada
aplikasi help screen.
Pada latihan ini kita dapat menyelesaikan langkah-langkah sbb:
Membuat struktur sistem class HelpDL
Menambah Iungsi untuk download dan menyediakan inIormasi help
Tujuan dari latihan ini adalah untuk menambah Iungsi help pada aplikasi. Sebuah webserver
mempunyai Iile help.text kemudian kita dapat membaca dari Universal Resource Locator (URL):
http://|insxructors machine|help.txt.
Pada latihan ini kita membuat sebuah class baru yang disebut class HelpDL. Class HelpDL berisi
obyek TextBox yang dapat menampilkan teks help dari website. Ini artinya class HelpDL dapat
terhubung dengan webserver, membaca teks help, dan menyisipan teks kedalam komponen
TextBox. Kita juga menambahkan option help pada screen menu dan update interIace
CommandListener untuk mengakomodasi user dari menu item help.
7.3. Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah 1- Membuat struktur sistem HelpDL
Pada langkah ini, kita membuat initial struktur dari sistem HelpDL. Kita set class untuk
menampilkan obyek TextBox pada user dan mengimplementasikan Iungsi return pada menu
utama. Copy Iile pada lokasi direktori ..\apps\Lab6_Exercise1\src dan ikuti step ini:
Praktikum
7
Mengakses Data dan
Servis 1aringan
Riyanto Sigit
Wiratmoko Yuwono
74
1. MendeIinisikan sebuah class baru HelpDL
2. MendeIinisikan property:
Display deviceDisplay Menerima sebuah reIeren pada tampilan untuk navigasi
kembali pada system menu.
Displayable mainMenu Menerima sebuah reIeren untuk system menu.
TextBox help Menerima sebuah reIeren pada obyek TextBox dalam data Help
Screen dibaca.
Command back Menerima sebuah reIeren untuk Iungsi kembali dari Help Screen.
3. MendeIinisikan konstructor HelpDL (Display dd)
Hanya class konstruktor yang ada. Ketika dibuat obyek Display harus menjamin navigasi
kembali pada system menu dan harus disediakan dalam property deviceDisplay.
4. MendeIinisikan methods
void registerPrev(Displayable prev) Digunakan untuk register screen ketika system
navigasi kembali.
void showPrev() Dipanggil ketika user kembali dari screen TextBox.
void showHelpScreen() digunakan untuk membuat scrren help tampak.
void commandAction(Command c, Displayable d) Digunakan untuk memanggil
method sendiri untuk kembali ke menu utama
5. MemodiIikasi class MainMenu untuk menambah option screen help dan user navigasi
diantara menu dan system help.
Langkah 2- Menambah fungsi untuk download dan menyediakan informasi help
Pada langkah ini kita menambah Iungsi untuk download inIormasi help dan menyediakan
peralatan local. Untuk menjalankan kita tidak mengunci emulator dan proses download harus
dalam thread.
1. ModiIikasi class HelpDL untuk implementasi interIace Runnable
2. Tambah method pada class HelpDL
void downloadHelp() Menghubungkan, download, dan assign teks pada obyek help
TextBox.
void run() DideIinisikan oleh interIace Runnable, ketika dijalankan method ini harus
memanggil method downloadHelp().
Riyanto Sigit
Wiratmoko Yuwono
75
3. ModiIikasi method showHelpScreen() ketika dipanggil, membuat dan menjalankan
thread baru. Kode harus dijalankan ketika dideIinisikan method run().
7.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Program 7-1 adalah contoh Iile HelpDL.java.
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
public class HelpDL implements CommandListener,Runnable
private Display deviceDisplay;
private Displayable mainMenu;
private TextBox help;
private Command back;
public HelpDL(Display dd)
deviceDisplay dd;
help new TextBox("StarShip Battle Help", null, 100, TextField.ANY );
back new Command("Return", Command.BACK, 1);
help.addCommand(back);
help.setCommandListener(this);
}
public void registerPrev(Displayable prev)
mainMenu prev;
}
private void showPrev()
deviceDisplay.setCurrent(mainMenu);
}
public void showHelpScreen()
Thread download new Thread(this);
download.start();
deviceDisplay.setCurrent(help);
}
public void commandAction(Command c, Displayable d)
showPrev();
}
public void run()
downloadHelp();
}
Riyanto Sigit
Wiratmoko Yuwono
76
Program 7-2 adalah contoh Iile MainMenu.java.
private void downloadHelp()
try
HttpConnection conn
(HttpConnection)Connector.open("http://localhost:8080/help.txt");
int size (int)(conn.getLength());
StringBuIIer tmp new StringBuIIer(size);
InputStreamReader input new
InputStreamReader(conn.openInputStream());
char|| buIIer new char|25|;
while((input.read(buIIer,0,buIIer.length)) ! -1)
tmp.append(buIIer);
buIIer new char|25|;
}
input.close();
conn.close();
String helpText tmp.toString();
help.setMaxSize(helpText.length());
help.setString(helpText);
}catch(Exception e)
System.out.println("ERR: getting HelpScreen");
e.printStackTrace();
help.setString("Help System is unavailable, please try again later.");
}
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command exitGame;
private Command helpScreen;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
private Battle gameEngine;
private HelpDL helpSystem;
Riyanto Sigit
Wiratmoko Yuwono
77
Program 6-3 adalah contoh Iile MainMenu.java.
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
helpScreen new Command("Help", Command.HELP, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(helpScreen);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
gameEngine new Battle(d, this);
helpSystem new HelpDL(d);
helpSystem.registerPrev(menu);
}
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI (c helpScreen)
showHelp();
}else iI(c exitGame)
exitGame();
}
}
public void startGame()
gameEngine.start();
deviceDisplay.setCurrent(gameEngine);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
Riyanto Sigit
Wiratmoko Yuwono
78
Program 7-3 adalah contoh Iile StarShipBattle.java.
public void showMenu()
deviceDisplay.setCurrent(menu);
}
public void showHelp()
helpSystem.showHelpScreen();
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
LoginForm lI new LoginForm(d);
MainMenu mm new MainMenu(this, d);
SplashScreen ss new SplashScreen();
lI.registerMenu(mm);
ss.registerLogin(lI);
d.setCurrent(ss);
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
Riyanto Sigit
Wiratmoko Yuwono
79
Program 7-4 adalah contoh Iile UserOption.java.
import javax.microedition.lcdui.*;
import java.io.*;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
private OptionsRS optionStore;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
initializeOptions( );
}
private void initializeOptions( )
optionStore new OptionsRS( );
iI(!optionStore.recordExists())
name.setString("Joe Smith");
alias.setString("BattleMaster");
saveOptions();
}
}
Riyanto Sigit
Wiratmoko Yuwono
80
private void retrieveOptions()
try
ByteArrayInputStream bOptions new
ByteArrayInputStream(optionStore.readOption());
DataInputStream dOptions new DataInputStream(bOptions);
name.setString(dOptions.readUTF());
alias.setString(dOptions.readUTF());
dOptions.close();
bOptions.close();
}catch(IOException ioe)
System.out.println("ERR:USEROPTIONS: problem retrieving data");
}
}
private void saveOptions()
try
ByteArrayOutputStream bOptions new ByteArrayOutputStream();
DataOutputStream dOptions new DataOutputStream(bOptions);
dOptions.writeUTF(name.getString());
dOptions.writeUTF(alias.getString());
optionStore.writeOption(bOptions.toByteArray());
dOptions.close();
bOptions.close();
}catch(IOException ioe)
System.out.println("ERR:USEROPTIONS: problem saving data");
}
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
private void showAlertUpdate()
saveOptions();
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
retrieveOptions();
deviceDisplay.setCurrent(inputForm);
}
}
Riyanto Sigit
Wiratmoko Yuwono
81
Program 7-5 adalah contoh Iile SplashScreen.java.
Program 7-6 adalah contoh Iile OptionRS.java
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private LoginForm login;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
public void registerLogin(LoginForm lI)
login lI;
}
public void keyPressed(int keyCode)
login.showLoginForm();
}
}
import javax.microedition.rms.*;
import java.io.*;
public class OptionsRS
private String storeName "StarShipOptions";
private RecordStore optionStore;
private byte|| currentOption;
public OptionsRS()
try
optionStore RecordStore.openRecordStore(storeName,true);
}catch(Exception ioe)
System.out.println("ERR: Opening RecordStore");
}
}
Riyanto Sigit
Wiratmoko Yuwono
82
public byte|| readOption()
try
iI(currentOption null)
currentOption optionStore.getRecord(1);
}
}catch(Exception e)
System.out.println("ERR: reading options");
}
return currentOption;
}
public void writeOption(byte|| option)
try
iI(recordExists())
optionStore.setRecord(1, option,0,option.length);
}else
optionStore.addRecord(option,0, option.length);
}
}catch(Exception e)
System.out.println("ERR: saving options");
}
currentOption option;
}
public boolean recordExists()
boolean response true;
try
iI (optionStore.getNumRecords() !1 )
return Ialse;
}
}catch(RecordStoreException rse)
System.out.println("ERR:OPTIONRS:unable to read the number oI
records");
response Ialse;
}
return response;
}
public void close()
try
optionStore.closeRecordStore();
}catch(Exception e)
System.out.println("ERR: Closing RecordStore");
}
}
}
Riyanto Sigit
Wiratmoko Yuwono
83
8.1. Tujuan:
Setelah selesai praktikum ini, kita dapat menambah suara pada game StarShipBattle.
8.2. Latihan: Menambah suara pada game StarShipBattle.
Pada latihan ini kita dapat menambah properti Player exploder pada class Battle.
Tujuan dari latihan ini untuk menambah suara meletus pada game. Letusan dapat dibunyikan
ketika kapal musuh menabrak kapal pahlawan.
8.3. Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah 1- Menambah property Player exploder pada class Battle
Copy program dari direktori ..\apps\Lab7_Exercise1\src ke direktori ..\apps\Lab8_Exercise1\src
dan ikuti step ini:
1. Tambahkan property Player exploder pada class Battle.
2. Pada konstruktor class Battle tambahkan kode untuk membaca Iile /explos.wav pada
InputStream. Gunakan method getResourceAsStream().
3. Buat sebuah obyek Player menggunakan InputStream pada step 2 dan assign hasilnya
pada property exploder.
4. Pada method Battle.destroShips() tambahkan kode untuk membunyikan suara letusan
ketika kapal tabrakan.
8.4. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Bandingkan jawaban anda dengan contoh program.
Praktikum
8
Kontrol Media
Riyanto Sigit
Wiratmoko Yuwono
84
Program 8-1 adalah contoh Iile Battle.java.
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import java.io.*;
public class Battle extends GameCanvas implements Runnable
private TiledLayer backgrnd;
private LayerManager lmgr;
private Sprite ship;
private Sprite enemy;
private Player exploder;
private Display deviceDisplay;
private MainMenu menu;
private boolean running Ialse;
public Battle(Display s, MainMenu m)
super(true);
deviceDisplay s;
menu m;
lmgr new LayerManager();
try
Image bkImage Image.createImage("/background.png");
backgrnd new TiledLayer(7,8,bkImage,20,20);
backgrnd.setPosition(20,12);
int map|| 1,2,3,4,1,2,3,
2,4,3,1,4,3,1,
4,3,2,1,1,2,4,
2,3,4,1,2,3,1,
3,4,1,2,3,1,4,
2,4,3,1,4,3,1,
4,1,2,3,1,3,4,
2,3,1,4,2,2,1 };
Ior (int i 0; i map.length; i)
int col i7;
int row (i-col) /7;
backgrnd.setCell(col,row,map|i|);
}
InputStream sound getClass().getResourceAsStream("/explos.wav");
String type "audio/x-wav";
exploder Manager.createPlayer(sound,type);
}catch(IOException ioe)
System.out.println("ERR:Loading Image");
}catch(MediaException me)
System.out.println("ERR:Initializing game sounds");
}
Riyanto Sigit
Wiratmoko Yuwono
85
initSprites();
lmgr.append(backgrnd);
lmgr.insert(ship,0);
lmgr.insert(enemy,0);
Graphics g getGraphics();
lmgr.paint(g,0,0);
IlushGraphics();
}
public void initSprites()
try
Image shipImage Image.createImage("/starshipline.png");
ship new Sprite(shipImage, 30,30);
ship.setFrame(1);
ship.setPosition(70,130);
Image enemyImage Image.createImage("/alienb.png");
enemy new Sprite(enemyImage,30,30);
enemy.setFrame(1);
enemy.setPosition(70,15);
}catch(IOException ioe)
System.out.println("ERR: Generating Sprite");
}
}
public void stop()
running Ialse;
}
public void start()
System.out.println("Starting the game thread");
running true;
Thread t new Thread(this);
t.start();
}
public void run()
System.out.println("In the game loop");
Graphics g getGraphics();
int ks 0;
int currentX 0;
lmgr.paint(g,0,0);
IlushGraphics();
while (running)
ks getKeyStates();
currentX ship.getX();
ship.setFrame(1);
iI ((ks & LEFTPRESSED) ! 0)
iI((currentX-5) ~20)
ship.setFrame(0);
ship.move(-5,0);
}
Riyanto Sigit
Wiratmoko Yuwono
86
Program 6-3 adalah contoh Iile MainMenu.java.
}else iI((ks & GAMEAPRESSED) ! 0)
stop();
}
iI((enemy.getY() 5) 140)
enemy.move(0,5);
iI(enemy.collidesWith(ship,true))
destroyShips();
}
}else
enemy.setPosition(70,15);
}
lmgr.paint(g,0,0);
IlushGraphics();
try
Thread.sleep(100);
}catch(InterruptedException ie)}
}
System.out.println("Leaving the game loop");
menu.showMenu();
}
private void destroyShips()
Graphics g getGraphics();
try
exploder.start();
//Manager.playTone(65,1000,60);
}catch(MediaException me)
System.out.println("ERR: Sound will not play!");
}
enemy.setFrame(3);
ship.setFrame(4);
lmgr.paint(g, 0,0);
IlushGraphics();
try
Thread.sleep(1500);
}catch(InterruptedException ie)}
enemy.setFrame(1);
enemy.setPosition(70,15);
}
}
Riyanto Sigit
Wiratmoko Yuwono
87
Program 8-2 adalah contoh Iile StarShipBattle.java.
Program 7-4 adalah contoh Iile UserOption.java.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StarShipBattle extends MIDlet
private Iinal String proIileVersion "MIDP-2.0";
private Iinal String conIigVersion "CLDC-1.0";
public StarShipBattle()
String pv getAppProperty("MicroEdition-ProIile");
String cv getAppProperty("MicroEdition-ConIiguration");
iI((pv.equals(proIileVersion)) && (cv.equals(conIigVersion)))
System.out.println("Versions ok, proceed as needed");
System.out.println("Loading the application...");
}else
System.out.println("Versions incorrect...unable to proceed");
System.out.println("Unloading the application...");
shutDown();
}
}
public void startApp()
System.out.println("in the startApp()");
Display d Display.getDisplay(this);
LoginForm lI new LoginForm(d);
MainMenu mm new MainMenu(this, d);
SplashScreen ss new SplashScreen();
lI.registerMenu(mm);
ss.registerLogin(lI);
d.setCurrent(ss);
}
public void pauseApp()
System.out.println("in the pauseApp()...");
}
public void destroyApp(boolean unc)
System.out.println("in the destroyApp()... ");
}
public void shutDown()
destroyApp(Ialse);
notiIyDestroyed();
}
}
Riyanto Sigit
Wiratmoko Yuwono
88
Program 8-3 adalah contoh Iile SplashScreen.java.
Program 8-4 adalah contoh Iile LoginForm.java.
import javax.microedition.lcdui.*;
public class LoginForm implements CommandListener
private SecretWordItem swi;
private Form loginForm;
private TextField userEntry;
private Display deviceDisplay;
private MainMenu mainMenu;
private Command enter;
public LoginForm(Display d )
deviceDisplay d;
loginForm new Form("Login");
swi new SecretWordItem();
userEntry new TextField("Password", null, 25, TextField.ANY);
enter new Command("Enter", Command.OK, 1);
loginForm.append(swi);
import javax.microedition.lcdui.*;
import java.io.IOException;
public class SplashScreen extends Canvas
private Image splashImage;
private LoginForm login;
public SplashScreen()
loadSplashScreen();
}
public void loadSplashScreen()
try
splashImage Image.createImage("/titlepage.png");
}catch(IOException ioe)
System.out.println("ERR:SplashScreen: Unable to load image");
}
}
public void paint(Graphics g)
g.IillRect(0,0,getWidth(), getHeight());
g.drawImage(splashImage, 0,0, Graphics.TOP , Graphics.LEFT);
}
public void registerLogin(LoginForm lI)
login lI;
}
public void keyPressed(int keyCode)
login.showLoginForm();
}
}
Riyanto Sigit
Wiratmoko Yuwono
89
Program 8-5 adalah contoh Iile MainMenu.java
loginForm.append(userEntry);
loginForm.addCommand(enter);
loginForm.setCommandListener(this);
}
public void registerMenu(MainMenu menu)
mainMenu menu;
}
public void showLoginForm()
deviceDisplay.setCurrent(loginForm);
}
public void showMenu()
mainMenu.showMenu();
}
public void commandAction(Command c, Displayable d)
iI (swi.checkWord(userEntry.getString()))
showMenu();
}else
Alert err new Alert("Invalid Password!", "Invalid Password\n Please
try again", null, AlertType.ERROR);
err.setTimeout(Alert.FOREVER);
deviceDisplay.setCurrent(err, loginForm);
}
}
}
import javax.microedition.lcdui.*;
import java.io.IOException;
public class MainMenu implements CommandListener
private List menu;
private Display deviceDisplay;
private Command startGame;
private Command setOptions;
private Command helpScreen;
private Command exitGame;
private Gauge loadingGameGauge;
private Alert loadingAlert;
private StarShipBattle ssb;
private UserOptions userOptions;
private HelpDL helpSystem;
private Battle gameEngine;
Riyanto Sigit
Wiratmoko Yuwono
90
public MainMenu(StarShipBattle mid, Display d)
deviceDisplay d;
menu new List("Game Menu", Choice.IMPLICIT);
startGame new Command("Start Game", Command.OK, 1);
setOptions new Command("Set Options", Command.OK, 1);
helpScreen new Command("Help", Command.HELP, 1);
exitGame new Command("Exit Application", Command.EXIT, 1);
menu.addCommand(startGame);
menu.addCommand(setOptions);
menu.addCommand(helpScreen);
menu.addCommand(exitGame);
loadingGameGauge new Gauge(null,
Ialse,Gauge.INDEFINITE,Gauge.CONTINUOUSRUNNING);
loadingGameGauge.setPreIerredSize(-1,- 1);
loadingAlert new Alert("Loading Game", "Loading StarShip Battle 2004,
Please standby...", null, AlertType.INFO);
menu.setCommandListener(this);
ssb mid;
userOptions new UserOptions(d);
userOptions.registerMenu(menu);
helpSystem new HelpDL(d);
helpSystem.registerPrev(menu);
gameEngine new Battle(d, this);
}
public void commandAction(Command c, Displayable d)
iI(c startGame)
startGame();
}else iI(c setOptions)
setOptions();
}else iI (c helpScreen)
showHelp();
}else iI(c exitGame)
exitGame();
}
}
public void startGame()
gameEngine.start();
deviceDisplay.setCurrent(gameEngine);
}
public void setOptions()
userOptions.showUserOpt();
}
public void exitGame()
ssb.shutDown();
}
Riyanto Sigit
Wiratmoko Yuwono
91
Program 8-6 adalah contoh Iile UserOption.java.
public void showMenu()
deviceDisplay.setCurrent(menu);
}
public void showHelp()
helpSystem.showHelpScreen();
}
}
import javax.microedition.lcdui.*;
import java.io.*;
public class UserOptions implements CommandListener
private Form inputForm;
private TextField name;
private TextField alias;
private Display deviceDisplay;
private String nameAlertText "Your name has changed.";
private String aliasAlertText "Your alias has changed.";
private String saveAlertText "Data Saved!";
private Image okImage;
private Alert updateAlert;
private Displayable mainMenu;
private Command saveData;
private OptionsRS optionStore;
public UserOptions(Display d)
name new TextField("UserName", null, 25, TextField.ANY);
alias new TextField("alias", null, 25, TextField.ANY);
inputForm new Form("User InIormation");
inputForm.append(name);
inputForm.append(alias);
deviceDisplay d;
try
okImage Image.createImage("/dukeok8.png");
}catch(IOException io)
System.out.println("ERR:UserOptions:Unable to load image");
}
updateAlert new Alert("Data Changed", null,
okImage,AlertType.CONFIRMATION);
updateAlert.setTimeout(Alert.FOREVER);
//inputForm.setItemStateListener(this);
saveData new Command("Save", Command.OK, 1);
inputForm.addCommand(saveData);
inputForm.setCommandListener(this);
initializeOptions( );
}
Riyanto Sigit
Wiratmoko Yuwono
92
private void initializeOptions( )
optionStore new OptionsRS( );
iI(!optionStore.recordExists())
name.setString("Joe Smith");
alias.setString("BattleMaster");
saveOptions();
}
}
private void retrieveOptions()
try
ByteArrayInputStream bOptions new
ByteArrayInputStream(optionStore.readOption());
DataInputStream dOptions new DataInputStream(bOptions);
name.setString(dOptions.readUTF());
alias.setString(dOptions.readUTF());
dOptions.close();
bOptions.close();
}catch(IOException ioe)
System.out.println("ERR:USEROPTIONS: problem retrieving data");
}
}
private void saveOptions()
try
ByteArrayOutputStream bOptions new ByteArrayOutputStream();
DataOutputStream dOptions new DataOutputStream(bOptions);
dOptions.writeUTF(name.getString());
dOptions.writeUTF(alias.getString());
optionStore.writeOption(bOptions.toByteArray());
dOptions.close();
bOptions.close();
}catch(IOException ioe)
System.out.println("ERR:USEROPTIONS: problem saving data");
}
}
public void registerMenu(Displayable mm)
mainMenu mm;
}
public void commandAction(Command c, Displayable d)
iI (c saveData)
updateAlert.setString(saveAlertText);
showAlertUpdate();
}
}
Riyanto Sigit
Wiratmoko Yuwono
93
Program 8-7 adalah contoh Iile OptionRS.java.
private void showAlertUpdate()
saveOptions();
deviceDisplay.setCurrent(updateAlert, mainMenu);
}
public void showUserOpt()
retrieveOptions();
deviceDisplay.setCurrent(inputForm);
}
}
import javax.microedition.rms.*;
import java.io.*;
public class OptionsRS
private String storeName "StarShipOptions";
private RecordStore optionStore;
private byte|| currentOption;
public OptionsRS()
try
optionStore RecordStore.openRecordStore(storeName,true);
}catch(Exception ioe)
System.out.println("ERR: Opening RecordStore");
}
}
public byte|| readOption()
try
iI(currentOption null)
currentOption optionStore.getRecord(1);
}
}catch(Exception e)
System.out.println("ERR: reading options");
}
return currentOption;
}
public void writeOption(byte|| option)
try
iI(recordExists())
optionStore.setRecord(1, option,0,option.length);
}else
optionStore.addRecord(option,0, option.length);
}
}catch(Exception e)
System.out.println("ERR: saving options");
}
Riyanto Sigit
Wiratmoko Yuwono
94
Program 8-8 adalah contoh Iile SecretWordItem.java
currentOption option;
}
public boolean recordExists()
boolean response true;
try
iI (optionStore.getNumRecords() !1 )
return Ialse;
}
}catch(RecordStoreException rse)
System.out.println("ERR:OPTIONRS:unable to read the number oI
records");
response Ialse;
}
return response;
}
public void close()
try
optionStore.closeRecordStore();
}catch(Exception e)
System.out.println("ERR: Closing RecordStore");
}
}
}
import javax.microedition.lcdui.*;
public class SecretWordItem extends CustomItem
private String secretWord "Cubs";
public SecretWordItem()
super("PassCode Prompt");
}
public int getMinContentWidth() return 100; }
public int getMinContentHeight() return 20; }
public int getPreIContentWidth(int width)
return getMinContentWidth();
}
public int getPreIContentHeight(int height)
return getMinContentHeight();
}
public void paint(Graphics g, int w, int h)
g.setColor(0,0,255);
g.IillRect(0,0, w -1, h- 1);
g.setColor(255,255,255);
g.drawString(secretWord, 50,0, g.TOP,g.HCENTER);
}
Riyanto Sigit
Wiratmoko Yuwono
95
public boolean checkWord(String word)
boolean result Ialse;
iI (secretWord.equals(word))
result true;
}
return result;
}
}
Riyanto Sigit
Wiratmoko Yuwono
96
9.1. Tujuan:
Setelah selesai praktikum ini, kita dapat:
Membuat sertiIikat pada program
AutentiIikasi sebuah MIDlet
Membuat Midlet yang dapat menangani hubungan statik.
Membuat Midlet yang dapat menangani hubungan dinamik.
9.2. Latihan 1: Membuat sertifikat pada program
Pada latihan ini, kita dapat menyelesaikan langkah-langkah sbb:
Menggunakan J2ME Wireless Toolkit untuk memberikan sertiIikat pada program.
Menambah kunci public pada Iile JAD dengan baik.
Meberitahukan pada MIDlet-CertiIicate-n-m: bahwa sertiIikat sudah ditambah pada Iile
JAD.
Tujuan dari latihan ini dapat menggunakan J2ME Wireless Toolkit untuk memberikan sertiIikat
pada program. Sekarang game StarShip Battle sudah selesai, kita harus memprotek aplikasi.
Dengan menambah sertiIikat pada aplikasi, kita tidak hanya memprotek keaslian intelektual tapi
juga memprotek pemakai dari download yang tidak diinginkan.
Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah 1- Menggunakan 12ME Wireless Toolkit untuk memberikan identitas pada
program
Pada langkah ini kita menggunakan J2ME Wireless Toolkit untuk memberikan sertiIikat pada
program.
Praktikum
9
MIDP Security
Riyanto Sigit
Wiratmoko Yuwono
97
Copy program dari direktori ..\apps\Lab8Exercise1\src ke direktori ..\apps\Lab9Exercise1\src
dan ikuti step ini:
1. Jalankan J2ME Wireless Toolkit dan buka proyek lab9exercise1.
2. Dari menu J2ME Wireless Toolkit pilih Project dan pilih Sign.
3. Untuk membuat kunci baru pilih New Key Pair dan lakukan setting sbb:
Alias: StarShipBattleKey
Domain c:localhost
O:Sudent Productions
4. Pilih Create dan pilih trusted dari menu pull-down
5. Pilih OK
SertiIikat telah kita pasang dan kita telah membuat kunci baru yang dapat digunakan untuk
menandai game StarShipBattle kita.
Langkah 2- Menambah kunci public pada file 1AD dengan baik
Keamanan sebuah aplikasi dan API tergantung pada domain proteksi yang baik. Secara umum
aplikasi terinstal dalam domain untrusted pada J2ME Wireless Toolkit. Ketika pada domain
untrusted maka aplikasi harus ijin. Pada MIDP 2.0 memungkinkan untuk menggunakan sertiIikat
dengan baik. Pada langkah 1 kita memasang sertiIikat secara manual. Kunci private automatis
diinstal pada emulator dan kunci public sekarang ada. Pada langkah ini tambahkan kunci public
pada Iile JAD dengan baik.
Ikuti step berikut:
1. Jalankan J2ME Wireless Toolkit dan buka proyek lab9exercise1.
2. Dari menu J2ME Wireless Toolkit pilih File dan pilih Utilities.
3. Pilih Sign Midlet
4. Pilih sertiIikat StarShipBattle dari list disebelah kiri
5. Pilih Sign Midlet Suite
6. Dari Iile chooser, naIigasi Iile Lab9exercise1.jad yang terdapat pada direktori
apps\lab9Exercise1\bin
Langkah 3- Meberitahukan pada MIDlet-Certificate-n-m: bahwa sertifikat sudah
ditambah pada file 1AD
Riyanto Sigit
Wiratmoko Yuwono
98
Pada langkah sebelumnya kita tandai Midlet untuk aplikasi StarShipBattle. Pada langkah ini kita
Meberitahukan pada MIDlet-CertiIicate-n-m: bahwa sertiIikat sudah ditambah pada Iile JAD.
Dengan veriIikasi ditandai dengan baik.
Ikuti step berikut:
1. Pada editor teks buka Iile lab9Exercise1.jad yang terdapat pada direktori
apps\lab9Exercise1\bin
2. Bandingkan isi direktori apps\lab9Exercise1\bin dengan contoh pada program 9-1. Jika
kunci terinstal dengan benar kita dapat melihat program sama dengan contoh program 9-1
Riyanto Sigit
Wiratmoko Yuwono
99
9.3. Latihan 2: Autentifikasi sebuah MIDlet
Pada latihan ini kita install aplikasi menggunakan Over-the-Air (OTA)
Tujuannya adalah pemakai terproteksi ketika menjalankan API tanpa ijin. Meskipun Iile JAD
berisi sertiIikat pemakai tetap pada kondisi prompt untuk ijin. Jika pemakai memilih Iungsi help
dari game sementara aplikasi dijalankan. Domain sertiIikat dan proteksi hanya relevan dan
digunakan ketika aplikasi diinstal menggunakan OTA. J2ME Wireless Toolkit mempunyai
simulasi proses OTA dari aplikasi transIer dan install. Juga setelah aplikasi diinstal di emulator.
Aplikasi berjalan pada domain proteksi sebenarnya pemakai tidak pada kondisi prompt untuk ijin
untuk menjalankan proteksi API.
Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah - Menginstal Aplikasi Menggunakan OTA
Ikuti step berikut:
1. Jalankan J2ME Wireless Toolkit dan buka proyek lab9exercise1.
2. Dari menu J2ME Wireless Toolkit pilih Project dan pilih Run via OTA.
Disini dipilih emulator dan pemakai berinteraksi dengan emulator Aplication
Management SoItware (AMS)
3. Pada emulator pilih Apps
Emulator dapat melihat semua Midlet yang diinstal pada peralatan
4. Pilih select pada emulator
Direktori proyek Hypertext Markup Language (HTML) dapat terlihat
5. Pilih Menu dan pilih select
Halaman Lab9Exercise1.html mulai download
6. Pilih install
AMS mulai download Iile JAD. Ketika Iile JAD didownload emulator menampilkan
inIormasi Midlet
7. Pilih install lagi
AMS download Iile Java Archieve (JAR) dan install aplikasi pada emulator. Setelah
install lengkap kita lihat suite ditambahkan pada list aplikasi ketika simulator OTA
dijalankan
Riyanto Sigit
Wiratmoko Yuwono
100
8. Untuk veriIikasi install berhasil jalankan aplikasi dengan memilih lab9Exercise1 dari
list kemudian pilih Menu dan pilih Launch
9. Setelah aplikasi dijalankan pilih Help dari menu utama. Kita tidak dapat di promt untuk
ijin menjalankan hubungan jaringan
9.4. Latihan 3: Pendaftaran sebuah hubungan menggunakan konfigurasi
Midlet
Pada latihan ini kita mengembangkan game StarShipBattle untuk memberitahukan pemakai
ketika score tertinggi baru terdaItar dengan server utama.
Keuntungan Push Register adalah inIormasi dapat dikirim ke peralatan tanpa pemakai
membutuhkan. InIormasi dikirim server dari email, sales update, sport inIormation, untuk
merubah score game. Bagaimanapun juga Push Register memperkenalkan ide khusus karena
peralatan pemakai tidak ingin dihentikan oleh inIormasi yang tidak dibutuhkan.
Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah - Membuat Midlet baru
Copy program dari direktori ke apps\Lab9Exercise1\src ke apps\Lab9Exercise5\src Ikuti step
berikut:
1. Deklarasikan sebuah class baru yaitu HighScoreNotiIication extends class Midlet
dideIinisikan dalam javax.microedition.midled dan implementasikan interIace
CommandListener yang dideIinisikan dalam paket javax.microedition.lcdui
2. Deklarasikan property dari class HighScoreNotiIication:
List score Menampilkan score yang dikirim server ke peralatan
Display deviceDisplay menampilkan score ke pemakai
Command exit pemakai keluar dari Midlet
3. Deklarasikan method dari class HighScoreNotiIication:
void startApp() populasi property class oleh instant tipe data
Setelah lengkap method getConnection() dapat dipanggil
void pauseApp() tidak mempunyai implementasi
void destroyApp(Boolean unc) - tidak mempunyai implementasi
Riyanto Sigit
Wiratmoko Yuwono
101
public void commandAction(Command c, Displayable d) Menutup applikasi
void getConnection() Merubah list hubungan dari Push Registry
tiap hubungan sebuah thread baru dibuat yang menangani jaringan untuk merubah
inIormasi.
4. Mendeklarasikan inner class yaitu ConnectionHandler yang mengimplementasikan
interIace Runnable
5. Mendeklarasikan property String connURL dalam interIace ConnectionHandler. Properti
merepresentasikan URL untuk menghubungkan tanggung jawab thread. Properti ini set
instant dan memanggil method konstruktor.
6. Mendeklarasikan method dalam interIace ConnectonHandler:
ConnectionHandler(String cURL) Konstruktor digunakan untuk set property
connURL
void run() berisi inIormasi pengiriman jaringan dan mengupdate score.
7. Set property J2Me Wireless Toolkit:
9.5. Latihan 4: Pendaftaran sebuah hubungan menggunakan pemrograman
Pada latihan ini kita mendaItar sebuah hubungan static menggunakan JAD. Pada latihan ini kita
merubah aplikasi yang dikembangkan dalam latihan terakhir untuk menggunakan dinamik Pust
Registry dibandingkan pendaItaran static
Persiapan:
Untuk menyiapkan latihan ini lakukan setting computer pada lokasi direktori: labdir
Langkah - Modifikasi Aplikasi HighScoreNotification
1. Copy program dari direktori ke apps\Lab9Exercise5\src ke apps\Lab9Exercise6\src
2. Tambahkan properti pada midlet HighScoreNatiIication:
String url socket://:1024;
String datanull;
Riyanto Sigit
Wiratmoko Yuwono
102
3. Tambahkan method pada midlet HighScoreNatiIication:
boolean connectionRegistered(String URL) Iterasi melalui semua hubungan yang
didaItarkan dengan Push Registy. Jika URL ditemukan maka true dan jika tidak Ialse.
void registerConn(String URL) DaItarkan URL yang dilewatkan dengan Push
Registry.
4. Setelah startApp() cek property URL yang dilewatkan Push Registry dengan memanggil
method connectionRegistered(String URL). Jika Ialse maka method registerConn(String
URL) dijalankan lewatkan parameter property url. Iterasi menggunkan semua hubungan
untuk menentukan jika ada data yang datang dan penting untuk ditangani.
9.6. Penyelesaian Latihan
Gunakan penyelesaian untuk mengecek jawaban anda pada latihan dalam lab.
Latihan 1: Membuat Sertifikat
Gunakan program 9-1
Latihan 2: Autentifikasi sebuah Midlet
Setelah aplikasi dijalankan kita dapat memilih Help dari menu utama tanpa prompt untuk ijin
untuk menjalankan hubungan jaringan.
Latihan 3: Pendaftaran sebuah hubungan menggunakan konfigurasi Midlet
Bandingkan jawaban anda dengan contoh program 9-2 pada Iile HighScoreNotiIication.java.
Program 9-2 adalah contoh Iile HighScoreNotiIication.java Static Registration
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
public class HighScoreNotiIication extends MIDlet implements CommandListener
private List scores;
private Display deviceDisplay;
privat.e Command exit;
public void startApp()
deviceDisplay Display.getDisplay(this);
scores new List('Latest High Scor es, Choice.IMPLICIT ) ;
exit new Command('Exit,Comnand.EXIT, 1);
scores.addCommand(exit ) ;
Riyanto Sigit
Wiratmoko Yuwono
103
scores. setcommandListener(this);
getConnections();
deviceDisplay.setCurrent(scores);
)
public void pauseApp()
}
public void destroyApp(boolean unconditional)
}
public void commandAction(Command a, Displayable d)
destroyApp(Ialse);
notiIyDestroyed();
}
private void getConnections()
String || connlist PushRegistry.ListConnections(true) ;
iI(connList.length 0)
errorAlert();
}else
Ior(int index 0;indexconnList.length;index)
Thread handler new Thread(new ConnectionHandler(connList| index|));
handler.start();
}
}
}
private void erroralert ( )
Alert.error new Alert("Scores Unavailable", "I will notiIy you
when\n the scores have\n changed", null, AlertType.INFO);
error. setTimeout (Alert.FOREVER) ;
deviceDisplay.setCurrent(error,scores);
}
class ConnectionHandler implements Runnable
private String connURL;
public ConnectionHandler(String inURL)
connURL inURL;
}
public void run()
try
ServerSocketConnection ssc
(ServerSocketConnection)Connector.open (connURL);
SocketConnection sc (SocketConnection)ssc.acceptAndOpen();
Inputstream in sc.openInputStream();
InputstreamReader inMsg new InputStreamReader(in);
char|| temp new char|128|;
StringBuIIer data new String BuIIer(512);
Riyanto Sigit
Wiratmoko Yuwono
104
Latihan 4: Pendaftaran sebuah hubungan menggunakan pemrograman
Bandingkan jawaban anda dengan contoh program 9-3 pada Iile HighScoreNotiIication.java.
Program 9-3 adalah contoh Iile HighScoreNotiIication.java Dynamic Push Registration
while(inMsg.read(temp,0,temp.length)!-1)
data.append(temp) ;
}
iI(data.length()!0)
scores.append(data.toString().trim(),nu11) ;
}
inMsg.close();
sc.close();
ssc.close();
System.out.println("Closed the connection");
}catch(Exception e)
System.ou t.println('ERR: " connURL);
e.printstackTrace();
}
System.out.println("Leaving run()");
}
}
}
import javax.microedition.io.*;
import javax.microedition.1cdui.*;
import javax.microedition.midlet .*;
import java.io.*;
public class HighScoreNotiIication extends MIDlet implements CommandListener
String urlsocket://:5000;String datanull;
TextBox msg;Command exit;
public void startaApp()
try
iI (!connect.ionRegistered(url) )
registerConn(url);
}
String || conns PushRegistry.listConnections(true) ;
Ior(int index 0,indexconns.length;index)
data handleConnection(conns |index| ) ;
}
}catch(Exception e)
System.out.println("ERR: instartApp(),' ) ;
}
Riyanto Sigit
Wiratmoko Yuwono
105
iI(datanull)
data 'No Messages;
}
msg new TextBox("Incoming Message", data, data.length() 1,
TextFieId.ANY) ;
exit new Command("Exit", Command.EXIT,1);
msg.addCommand(exit);
msg.setCommandListener(this) ;
Display d Display.getDisplay(this) ;
d.setCurrent (msg);
}
public void pauseApp()
}
public void destroyApp(boolean unc)
}
public String handleConnection(String url)
String response null;
try
ServerSocketConnection ssc
(ServerSocketConnection)Connector.open (url ) ;
Socketconnection sc (SocketConnection) ssc. acceptAndOpen ( ) ;
InputStream in sc.openlnputStream();
iputStreamReader input new InputstreamReader(in) ;
char|| temp new char|128|;
StringBuIIer data new StringBuIIer(512);
while(input.read(temp,0, temp.length)!-1)
data.append(temp);
}
iI(data.length()!0)
response data.toString();
)
input.close();
)catch(Exception e)
System.out.println("Err:handleConnection()) ;
}
return response;
}
public boolean connectionRegistered(String url)
boolean response Ialse;
try
String || regConns PushRegistry.listConnections(Ialse);
Ior(int index0; index regconns.length; index)
iI (regConns |index| .equals (ur1))
response true;
}catch(Exception e)
Riyanto Sigit
Wiratmoko Yuwono
106
System.out.println("ERR: connectionRegistered()");
}
return responsei;
}
public void registerConn(String url)
String name this.getClass().getName(); String Iilter;
try
PushRegistry.registerConnection (url, name, Iilter);
)catch(Exception e)
System.out.println('ERR: Connection);
}
}
public void commandAction(Command c, Displayable d)
destroyApp(Ialse);
notiIyDestroyed();
}
}
Riyanto Sigit
Wiratmoko Yuwono
107
10.1. Tujuan:
Setelah selesai praktikum ini, kita dapat melengkapi aplikasi MIDP 2.0
10.2. Latihan : Melengkapi Aplikasi MIDP 2.0
Pada latihan ini, kita dapat menyelesaikan langkah-langkah sbb:
VeriIikasi konIigurasi web server dan menginstal aplikasi untuk pengembangan
Menginstal aplikasi dalam web server
Mengakses aplikasi menggunakan kelengkapan OTA
OTA adalah proses yang dikembangkan pada aplikasi mobile di atas peralatan mobile. Ada
banyak cara untuk mengembangkan OTA, salah satunya untuk aplikasi web server yang dapat
diakses oleh peralatan mobile. Setelah aplikasi diinstal di web server peralatan mobile harus
tersedia mekanisme untuk menginisialisasi download dan proses penginstalan.
Tujuan latihan ini untuk mengembangkan aplikasi pada Tomcat Web Server dan inisialisasi
proses instal dari J2ME Wireless Toolkit.
Persiapan:
Tomcat Web Server dibutuhkan untuk menyelesaikan praktikum ini.
Menyiapkan latihan sesuai seting workstation.
Tomcat Web Server instan pada direktori:
Installation directory
Lab directory location
Langkah 1- Verifikasi konfigurasi web server dan menginstal aplikasi untuk
pengembangan
Untuk mengembangkan aplikasi harus ada sebuah server. Tomcat Web Server adalah server
bebas yang dapat digunakan untuk test proses OTA. Tomcat siap diinstal pada sistem.
Praktikum
10
Over the Air Provisioning
Riyanto Sigit
Wiratmoko Yuwono
108
Bagaimanapun juga server tidak mempunyai veriIikasi. Pada langkah ini veriIikasi konIigurasi
tipe MIME pada web server dan instal aplikasi untuk deployment.
Tomcat mendeIinisikan semua tipe MIME dengan Iile web.xml. Ikuti step ini:
1. Buka instalasi direktori Iile \conI\web.xml pada teks editor. Ketika sebuah peralatan
mobile membutuhkan hubungan JAD, server memberikan indikasi data dikembalikan
sebuah tipe MIME tekxt/vnd.sun.j2me.app-descriptor.
2. Jalankan pencarian tipe MIME untuk menveriIikasi tipe MIME dengan benar
dideIinisikan pada Tomcat Iile web.xml.
3. Jika tipe MIME tidak ditemukan tambahkan dalam tipe MIME bagian Mapping pada Iile
web.xml:
mime-mapping~
extention~jad/extention~
mime-type~text/vnd.sun.j2me.app-descriptor/mime-type~
/mime-mapping~
4. Simpan perubahan dan tutup Iile web.xml
Langkah 2- Menginstal aplikasi dalam web server
Setelah web server di setup dengan baik kita dap menginstal aplikasi dalam web server. J2ME
Wireless Toolkit mempunyai pilihan paket aplikasi yang membuat aplikasi mudah diinstal.
Ketika aplikasi dipaket, J2ME Wireless Toolkit men-generate tiga Iile dalam direktori Project
bin.
ProjectName.html ini adalah standar halaman html yang terlihat dipaket dengan
hubungan Iile JAD.
ProjectName.jad - ini versi terakhir dari aplikasi Iile descriptor.
ProjectName,jar ini Iile JAR dari Midlet yang berisi Iile-Iile class dan sumber yang
dibutuhkan midlet.
Pada langkah ini kita meletakkan Iile pada lokasi dimana peralatan mobile dapat diakses.
1. Membuat kebutuhan Iile yang ada di pemakai, copy Iile dari direktori project bin
untuk menginstal direktori \webapps\ROOT\
2. Jalankan perintah untuk menjalankan web server: startup.bat.
Riyanto Sigit
Wiratmoko Yuwono
109
Langkah 3- Mengakses aplikasi menggunakan kelengkapan OTA
Pada langkah ini kita mengakses aplikasi menggunakan Iitur OTA dalam J2ME Wireless Toolkit
dan kebutuhan Iile HTML yang di copy pada langkah 2 step 1
1. Pada J2ME Wireless Toolkit pilih option RUN via OTA dari menu Project
Pada aksi ini memulai emulator AMS dan menyediakan akses pada aplikasi yang diinstal
pada emulator.
2. Pada emulator pilih Apps.
Pada aksi ini menuju menu Aplikasi yang menyediakan semua program yang diinstal
dalam emulator.v
3. Dari list Aplikasi pada program pilih SELECT pada peralatan.
Instal Aplikasi dan prompt kita menuju website dari aplikasi yang diinstal. DeIault
emulator menuju Iile HTML yang dilokasikan pada direktori Project bin yang terbuka.
4. Untuk download aplikasi dari Tomcat gunakan URL:
http://localhost:8080/Application.html
File HTML yang dipindahkan ke direktori webapps\ROOT pada step 1 dari latihan 2-
Instal aplikasi pada server.
5. Setelah lengkap rubah URL pilih Menu
6. Pilih SELECT untuk mengirim Iile HTML
Ditampilkan nama yang akan didownload.
7. Pilih instal pada peralatan untuk mengirim Iile JAD ke peralatan. Setelah pengiriman
lengkap kita dapat melihat inIormasi tentang midlet berdasarkan setting pada Iile JAD.
Sekarang kita veriIikasi aplikasi untuk mengirim Iile JAR.
8. Pilih instal untuk download dan instal aplikasi pada peralatan. Aplikasi sekarang terinstal
pad emulator dan proses OTA lengkap.

Anda mungkin juga menyukai