Posts tagged ‘J2ME Polish’
Memakai J2ME Polish GUI
Setelah selesai melakukan konfigurasi, memakai J2ME Polish GUI sangatlah mudah. Yang perlu dilakukan adalah membuat sebuah file polish.css di lokasi direktori resource yang telah ditentukan di build.xml. Berikut ini adalah contoh sebuah MIDlet yang dibuat dengan menggunakan J2ME Polish GUI:
Berikut ini adalah isi file polish.css untuk menghasilkan output seperti gambar di atas:
.menuUtama {
background {
type: snowflakes;
color: #cccccc;
flake-color: white;
max-flake-size: 20;
number-of-flakes: 50;
}
layout: horizontal-expand | horizontal-center | vertical-center;
}
.pilihanMenu {
layout: expand | center;
font {
face: proportional;
size: large;
color: black;
}
}
.pilihanMenu:hover {
layout: expand | center;
font {
size: large;
color: #dddddd;
}
background {
type: pulsating;
start-color: #333333;
end-color: #cccccc;
back-and-forth: true;
repeat: true;
}
}
title {
background {
type: web20;
color: #aaaaaa;
circle-color: #cccccc;
circle-anchor: bottom;
}
font {
face: proportional;
size: large;
color: #333333;
}
text-effect: drop-shadow;
layout: expand | center;
}
menu {
background {
type: horizontal-stripes;
first-top-color: #aaaaaa;
second-top-color: #777777;
first-bottom-color: #dddddd;
second-bottom-color: #aaaaaa;
}
}
leftcommand {
text-effect: shadow;
text-shadow-color: #cccccc;
}
Isi MIDlet-nya sendiri sangatlah sederhana, dengan kode program yang sangat familiar bagi yang sudah terbiasa memakai LCDUI:
package co.id.jocki.latihan;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class LatihanMIDlet extends MIDlet {
private Display display;
private List lstMenuUtama;
public LatihanMIDlet() {
display = Display.getDisplay(this);
//#style menuUtama
lstMenuUtama = new List("The Solid Snake", List.IMPLICIT);
//#style pilihanMenu
lstMenuUtama.append("New Game", null);
//#style pilihanMenu
lstMenuUtama.append("Load Game", null);
//#style pilihanMenu
lstMenuUtama.append("Options", null);
//#style pilihanMenu
lstMenuUtama.append("Exit", null);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
display.setCurrent(lstMenuUtama);
}
}
Yang membedakan hanyalah terdapat preprocessor #style (dalam bentuk comment) yang hanya akan dimengerti oleh J2ME Polish GUI, dan akan dipakai untuk melakukan translasi kode program nantinya.
Artikel ini juga dilengkapi dengan sebuah video tutorial yang dapat dilihat di sini.
Konfigurasi J2ME Polish
Framework J2ME Polish menyertakan build.xml yang merupakan build file Apache Ant yang dipakai untuk men-compile dan menjalankan emulator. Dengan demikian, pada dasarnya, J2ME Polish dapat dipakai pada IDE apa saja asalkan telah mendukung Apache Ant. Salah satu pengecualian adalah pada IDE NetBeans karena IDE tersebut telah menggunakan Apache Ant untuk menjalankan tugas-tugas standar, sehingga programmer harus memakai file build-netbeans.xml yang akan meng-’extends‘ task bawaan NetBeans (yang terletak di lokasi nbproject/build-impl.xml). Bila hal ini menyebabkan perilaku NetBeans menjadi aneh, sebaiknya jangan menggunakan plugin J2ME Polish untuk NetBeans! Sebaliknya, jalankan build.xml secara manual atau terpisah dari IDE tersebut. Pada IDE Eclipse, seseorang dapat memilih menu Window, Show View, Others.., kemudian memilih Ant, Ant. Pada window yang muncul, klik kanan bagian kosong dan pilih Add Buildfiles…, kemudian pilih build.xml bawaan J2ME Polish yang telah di-copy ke folder project sebelumnya.
Tanpa menggunakan plugin, project dapat dibuat seperti membuat project Java ME biasanya. Bedanya, file build.xml dan resources yang diperlukan harus di-copy secara manual ke folder project yang telah dibuat. Setelah itu, buka file build.xml dan lakukan perubahan pada file tersebut.
Target <target name=”j2mepolish”> adalah bagian yang paling sering harus diubah. Pada target ini dapat ditemukan tag <j2mepolish> yang di dalamnya terdapat sejumlah tag lagi, seperti <info>, <deviceRequirements>, <build>, dan <emulator>.
Tag <info> berisi informasi mengenai MIDlet, yang dapat diubah sesuai kebutuhan, misalnya:
<info
name="Latihan MIDlet"
version="1.0.0"
description="Latihan pertama saya"
vendorName="SolidSnake"
infoUrl="http://thesolidsnake.wordpress.com"
jarName="latihan.jar"
jarUrl="${polish.jarName}"
copyright="Copyright 2011 SolidSnake."
/>
Informasi yang ada di tag <info> nantinya akan mempengaruhi isi file JAD yang dihasilkan. Sebagai catatan, file JAD adalah file teks yang berisi informasi mengenai aplikasi, yang akan di-download oleh pengguna sebelum men-download file JAR.
Tag <deviceRequirements> merupakan salah satu kelebihan memakai J2ME Polish!! Dengan adanya tag ini, kita dapat menentukan target perangkat mobile dari aplikasi. J2ME Polish memiliki sejumlah besar daftar perangkat yang tersimpan di file vendors.xml, devices.xml, dan capabilities.xml. Ketiga file ini telah terdapat dalam file enough-j2mepolish-build.jar. Untuk melihat ketiga file ini, buka file enough-j2mepolish-build.jar dengan program yang dapat membaca arsip zip. Bila daftar yang ada dinilai masih kurang, seseorang dapat menambahkan perangkat baru di file custom-devices.xml.
Di dalam tag <deviceRequirements>, terdapat satu atau lebih tag <requirement>yang menjadi persyaratan bagi perangkat yang dapat menjalankan aplikasi ini. Cara yang paling gampang adalah menyamakan Identifier dari perangkat, seperti yang terlihat di:
<deviceRequirements> <requirement name="Identifier" value="Generic/AnyMidp1Phone" /> </deviceRequirements>
Jika ingin platform yang lebih spesifik, nilai value pada Identifier dapat diganti menjadi seperti “Nokia/Series40E3″, “Sony-Ericsson/JavaPlatform7″, dan sebagainya. Nilai ini harus sesuai dengan yang ada di vendors.xml dan devices.xml.
Lalu apa yang membuat <deviceRequirements> berguna? Tag ini memiliki atribut if dan unless, sehingga seseorang bisa mengatur deviceRequirement apa saja yang aktif berdasarkan property Ant. Misalnya, jika terdapat konfigurasi seperti:
<deviceRequirements if="untukNokiaS40Saja"> <requirement name="Identifier" value="Nokia/Series40E3" /> </deviceRequirements> <deviceRequirements if="untukSEJP7Saja"> <requirement name="Identifier" value="Sony-Ericsson/JavaPlatform7" /> </deviceRequirements>
maka jika <property name=”untukNokiaS40″ value=”true” /> dipanggil sebelumnya, maka hanya deviceRequirements tersebut saja yang aktif. Dengan demikian, seseorang bisa membuat target seperti “jalankanNokia“, “jalankanSonyEricson“, dan sebagainya, sehingga proses pengembangan aplikasi yang sama untuk banyak vendor berbeda menjadi mudah.
Tag <build> akan men-compile dan membuat file JAR dari kode program. Tag ini memiliki sejumlah elemen seperti <midlet>, <variables>, <resources>, <obfuscator>, dan lainnya. Yang harus diubah adalah tag <midlet> dimana programmer harus menentukan class MIDlet dan nama MIDlet. Satu hal yang berguna dan tidak ditemui pada IDE standar adalah tag <midlet> juga mendukung atribut if. Ini berarti seseorang dapat menentukan MIDlet apa saja yang akan menjadi bagian dari JAR berdasarkan kondisi tertentu! Sementara pada IDE seperti NetBeans dan Eclipse, seluruh MIDlet dalam proyek yang sama akan di-bundle menjadi satu kesatuan, tanpa pengkondisian tertentu.
Terakhir, untuk menjalankan emulator, tambahkan tag <emulator>. Tag ini sangat sederhana, hanya terdiri dari atribut seperti wait, securityDomain, enableProfiler, enableMemoryMonitor, dan sebagainya. Perlu diingat bahwa programmer TIDAK menentukan secara manual emulator apa yang akan dijalankan. J2ME Polish secara otomatis menentukan emulator yang akan dijalankan berdasarkan pengaturan di deviceRequirements. Pada banyak kasus, J2ME Polish akan menjalankan MicroEmulator yang sudah ter-install bersama dengannya. MicroEmulator adalah emulator JME yang berjalan pada Java Standard Edition.
Bila tidak ingin memakai MicroEmulator, melainkan emulator bawaan Java ME Platform SDK, gunakan Identifier seperti Generic/AnyMidp1Phone pada deviceRequirements. Perlu diingat bahwa Java ME Platform SDK mungkin akan menolak menjalankan JAR yang telah mengandung file-file class J2ME Polish karena memiliki ukuran yang besar, di atas 1 MB. Untuk mengatasi permasalahan ini, masuk ke direktori instalasi Java ME Platform SDK 3.0, kemudian buka direktori runtimes, lalu cldc-hi-javafx, dan kemudian buka direktori bin. Edit file jwc_properties.ini yang terdapat pada direktori tersebut dengan notepad atau editor lainnya. Gunakan fitur search untuk mencari tulisan system.jam_space, kemudian ganti nilai 1000000 menjadi nilai yang lebih besar.
Setelah itu, tutup device-manager.exe melalui icon di taskbar ataupun melaui task manager. Jalankan kembali target Ant j2mepolish, dan kini emulator Java ME Platform SDK akan menampilkan MIDlet dengan lancar. Tapi satu hal yang perlu diingat adalah pada kenyataannya, sama seperti emulator yang sebelumnya menolak, perangkat mobile lama mungkin juga tidak mendukung file JAR yang besar.
Memakai J2ME Polish Di Dalam NetBeans
J2ME? Sebuah nama yang masih mewakili generasi lama, karena Sun (kini dibeli Oracle) sudah lama mengganti nama Java 2 Micro Edition (J2ME) menjadi Java Micro Edition (JME). Dari sisi teknologi sendiri, kini sudah ada Java FX yang semakin didukung. Lalu kenapa masih memakai J2ME Polish?
J2ME Polish adalah sebuah framework tambahan dari Enough Software dan bersifat open-source. J2ME Polish terdiri atas beberapa komponen, seperti:
- Lush, untuk perancangan user interface.
- Janus, untuk transcoding aplikasi Java Micro Edition ke BlackBerry atau Android.
- Touch, untuk mempermudah pemograman networking.
- Trunk, untuk menyederhanakan proses menyimpan dan membaca data.
- Marjory, merupakan kumpulan database yang berisi informasi perangkat mobile, yang dihimpun bersama oleh komunitas.
Pada konotasi secara umum dan juga pada artikel ini, J2ME Polish sering dirujuk dengan komponen Lush-nya, sehingga asumsi-nya J2ME Polish adalah framework berbasis GUI.
Jika memang demikian, apa kelebihan framework user interface di J2ME Polish? Pada beberapa framework lain, seperti Kuix (Kalmeo User Interface eXtensions), tampilan user interface digantikan sepenuhnya dengan menggunakan XML. J2ME Polish mengambil pendekatan yang berbeda, dimana J2ME Polish tetap menggunakan class-class LCDUI seperti class Form dan turunan Item (TextField, StringItem, dsb). Hal ini berarti untuk beralih dari proyek yang sudah ada ke J2ME Polish, programmer tidak perlu mengubah kode program yang sudah ada. J2ME Polish tentu saja juga menyediakan class-class tambahan, seperti TabbedForm, TreeItem, dan sebagainya. Setiap komponen tersebut dapat di-customize dengan membuat sebuah file teks yang menggunakan syntax CSS.
Kelemahan J2ME Polish, sama seperti framework lainnya yang bukan merupakan bagian dari standar Java, adalah ukuran JAR yang meningkat beberapa kilobyte. Ini karena JAR harus menyertakan kode program J2ME Polish.
File JAR J2ME Polish dapat di-download di http://www.enough.de/products/j2me-polish/download. File berukuran sekitar 52 MB tersebut merupakan sebuah aplikas Java Standard Edition yang berfungsi sebagai installer. Ketik perintah berikut di command prompt untuk memulai proses instalasi:
java - jar j2mepolish-2.2.1.jar
Installer akan meminta beberapa informasi lokasi direktori, seperti lokasi instalasi NetBeans dan Java ME Platforms SDK. Installer juga menawarkan untuk menyiapkan sebuah plugin bagi NetBeans sehingga NetBeans dapat langsung menjalankan MIDlet yang memakai framework J2ME Polish.
Salah satu hal yang perlu diperhatikan bila melakukan instalasi plugin J2ME Polish untuk NetBeans 7 di Windows 7 adalah jangan lupa menjalankan NetBeans 7 dengan hak akses administrator. Bila pada saat melakukan update plugin, NetBeans 7 tidak memiliki hak akses administrator, ia akan terus me-restart dirinya sendiri walaupun aplikasinya sudah ditutup. Solusinya, tutup NetBeans 7 melalui Task Manager, kemudian jalankan kembali NetBeans 7 dengan men-klik kanan icon-nya lalu memilih Run as administrator.
Bila plugin telah ter-install dengan benar, pengguna dapat segera membuat proyek baru dengan memilih menu File, New Project, Java ME, dan men-klik pada J2ME Polish Project. Kotak dialog New Project yang muncul terlihat sedikit berbeda dari biasanya. Misalnya, sekarang pengguna dapat menentukan lokasi ia men-install J2ME Polish. Akan tetapi, halaman yang paling berubah dari biasanya adalah halaman Select Target Devices. Pilihan device terlihat semakin banyak berkat komponen Marjory dari J2ME Polish. Coba mulai dengan memilih Configuration “CLDC/1.1“, profiles “MIDP/2.1“, dan salah satu device Nokia seperti “Nokia E66″.
Di NetBeans, J2ME Polish membuat turunan dari build-impl.xml milik NetBeans sehingga pada saat tombol “Run” ditekan, yang akan dikerjakan adalah Ant’s Task milik proyek J2ME Polish. Untuk melihat Ant’s Task yang telah dimodifikasi tersebut, buka proyek melalui window Files, kemudian double-click pada build.xml.
Saya menemukan masalah pada saat akan menjalankan proyek, dimana window Output memunculkan kesalahan:
java.io.IOException: Cannot run program "jvisualvm": CreateProcess error=2, The system cannot find the file specified
Kesalahan ini terjadi karena pada saat menjalankan emulator, J2ME Polish juga menjalankan profiler, dalam hal ini adalah JVisualVM. Akan tetapi cara pemanggilan JVisualVM tersebut tidak diikuti dengan lokasi path yang lengkap! Hal ini menyebabkan ProcessBuilder tidak menemukan file yang akan dijalankan.
Solusi yang paling mudah adalah dengan meng-edit file build.xml untuk mematikan profiler. Lagipula, bagi sebagian orang, menjalankan JVisualVM setiap kali program di-run adalah hal yang menganggu. Pada bagian <target name=”j2mepolish”>, cari bagian yang bertanggung jawab untuk memanggil emulator, yang isinya seperti berikut ini:
<emulator wait="true" trace="class" securityDomain="trusted" enableProfiler="true" enableMemoryMonitor="false" enableNetworkMonitor="false" if="test and not debug" ></emulator>
Ganti nilai “true” pada atribut enableProfiler, enableMemoryMonitor, dan enableNetworkMonitor menjadi “false“. Setelah itu, emulator J2ME Polish harusnya dapat berjalan dengan lancar, seperti pada tampilan berikut ini:


