Anda di halaman 1dari 68

BAHASA PEMROGRAMAN JAVA

KOMUNIKASI DATA, J2ME DAN J2EE

WINDU GATA, SKOM

PENDAHULUAN
Buku bahasa pemrograman java komunikasi data dan J2ME, penulis akan membahas komunikasi data lebih dari satu komputer menggunakan sarana jaringan, kabel serial (rs232) dan sedikit membahas penggunaan Java Mobile (J2ME). Banyak peralatan yang menyediakan sarana komunikasi data seperti modem, mesin absen, mesin timbangan dan lain-lain yang dapat dihubungkan dengan komputer melalui kabel serial rs232 (com1 atau com2) dan jaringan komputer (Computer Network). Dan banyak dari programmer tidak mengetahui bagaimana caranya berinteraksi dengan peralatan tersebut, dengan ditulis buku ini setidaknya penulis memberikan cara menggunakannya dengan tujuan apabila programmer java berhadapan dengan alat tersebut tidak lagi merasa canggung karena ketidaktahuan dan dapat menggunakannya secara optimal BAB I PEMROGRAMAN KOMUNIKASI PADA KABEL SERIAL (RS232) RS232 MODEM BAB II PEMROGRAMAN KOMUNIKASI PADA JARINGAN KOMPUTER BAB III JAVA 2 MICRO EDITION BAB IV JAVA 2 ENTERPRISE EDITION (J2EE)

BAB I

PEMROGRAMAN SERIAL (RS232)

KOMUNIKASI

PADA

KABEL

Pada awal tahun 1960, sebuah lembaga yang dikenal dengan Electronic Industries Association, mengembangkan peralatan standard untuk komunikasi data. Saat ini peralatan sering kita kenal dengan nama Com port atau RS232, yang pada tahun 1990 dikenal dengan EIA232. Banyak peralatan yang kita lihat pada kehidupan sehari-hari, salah satunya adalah modem dial-up jika kita ingin menggunakan internet pada komputer. Terdapat interface yang menghubungkan modem dengan RS232 atau comm port yang berada pada belakang komputer. Secara elektornika berkomunikasi secara dua arah dan berjalan secara logika voltase seperti gambar 1.

Gambar 1. Voltase Pada RS232 Jika kita ingin mengirimkan huruf A dengan tujuh paritas bit data. Huruf A jika dikonversikan ke binary yaitu 100001, ditambah dengan start bit 0, parity bit 0 dan 2 stop bit 11. jika digabungkan maka jika mengirimkan huruf A pada tujuh paritas bit data akan berupa 01000001011. Untuk mengirimkan angka binari 0 kurang lebih voltase yang dibutuhkan adalah +3 sampai dengan +15 V. Sedangkan angka binari 1 kurang lebih voltase yang dibutuhkan adalah -3 V sampai dengan -15 V. MACAM-MACAM MODEL RS232

Pada awalnya RS232 dibuat dalam bentuk 25 pin, sejak IBM-AT (PC) terdapat model RS232 dengan bentuk Pin 9 (DB9). Hingga saat ini Pin 9 lebih banyak digunakan.

Gambar 2. RS232 Pin 9 (kiri) dan Pin 25 (kanan) Setiap pin pada RS232 pin 9 dan pin 25 ada keterangan penggunaannya :

Gambar 3. Penggunaan Pin pada RS232 Pin 9

Untuk melakukan konversi dari pin 9 ke pin 25 dapat dilakukan seperti pada gambar dibawah :

Gambar 4. Konversi dari Pin 9 ke pin 25

Penggunaan RS232 dapat juga digunakan untuk pengetesan pada satu komputer, dimana data akan terkirim ke diri sendiri (loop back).

Gambar 5. Loop Back Cara termudah untuk melakukan komunikasi data dengan 2 (dua) komputer yaitu RS232 null modem. Sebagai contoh, terdapat 3 (kabel) yang akan digunakan. Kabel pertama adalah Signal Ground, kabel kedua menghubungkan pin transive/pengirim ke pin recieve/penerima, dan kabel ketiga terhubung pada pin recieve/penerima ke pin transive/pengirim.

Gambar 6. RS232 Null Modem Pin9 MENGGUNAKAN RS232 DENGAN BAHASA PROGRAM JAVA Bahasa pemrograman java mendukung komponen RS232 tersebut. Yang disebut dengan javacommapi yang terdiri dari comm.jar, javax.comm.properties, dan win32com.dll yang dapat diunduh/download pada web site http://java.sun.com/products/javacomm/index.jsp. Untuk system operasi Ms. Windows 2000 dan XP, hasil install-an sering kali bermasalah. Cara penanganannya adalah sebagai berikut : 1. Copy comm.jar pada direktori <install-an>\jre\lib\ext 2. Copy win32com.dll pada direktori <install-an>\jre\bin 3. Copy javax.comm.properties pada direktori <install-an>\jre\lib Hal-hal yang perlu diketahui pada komunikasi pengiriman, data bits, parity, stop bits, dan flow control. 1. Kecepatan pengiriman, 300 bps sampai dengan 921600 yaitu kecepatan

2. 3. 4. 5.

Data bits, 5 sampai dengan 8 bits Parity terdiri dari even, odd dan none Stop bits, 1, 1.5 dan 2 Flow Control None

Gambar 7. Properties RS232 Pada salah satu contoh program pada web site www.sun.com untuk menggunakan alat RS232 adalah SimpleRead.java dan SimpleWrite.java. SimpleRead.java adalah program untuk membaca data yang didapatkan dari RS232 dan SimpleWrite.java adalah program untuk mengirimkan data melalui RS232. Dengan catatan kecepatan, data bit, stop bit, dan pariti harus sama antara satu dengan lainnya. Sebagai contoh jalankan program program penerima di komputer penerima dan program pengirim dikomputer pengirim. Program Penerima
/* * @(#)SimpleRead.java 1.12 98/06/25 SMI * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. * Program untuk Menerima data */ import java.io.*; import java.util.*; import javax.comm.*; public class SimpleRead implements Runnable, SerialPortEventListener { static CommPortIdentifier portId; static Enumeration portList; InputStream inputStream; SerialPort serialPort; Thread readThread; public static void main(String[] args) { //Mengidentifikasikan jumlah port pada komputer portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { //yang dibuka hanya port pertama atau COM1 if (portId.getName().equals("COM1")) { //jika menggunakan Unix //if (portId.getName().equals("/dev/term/a")) { SimpleRead reader = new SimpleRead(); } } } public SimpleRead() { try { serialPort = (SerialPort) portId.open("SimpleReadApp", 2000); } catch (PortInUseException e) {} try { inputStream = serialPort.getInputStream(); } catch (IOException e) {} try { serialPort.addEventListener(this); } catch (TooManyListenersException e) {} serialPort.notifyOnDataAvailable(true); try { //speed 9600, databit 8, stopbit 1, parity none serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) {} readThread = new Thread(this); readThread.start(); } public void run() { try { Thread.sleep(20000); } catch (InterruptedException e) {} } public void serialEvent(SerialPortEvent event) { switch(event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.RI: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE: //Menangkap data yang masuk ke komputer byte[] readBuffer = new byte[20]; try { while (inputStream.available() > 0) { int numBytes = inputStream.read(readBuffer); } //tampilkan ke layar System.out.print(new String(readBuffer)); } catch (IOException e) {} break; }

} }

Program Pengirim
/* * @(#)SimpleWrite.java 1.12 98/06/25 SMI * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. * Program Untuk Mengirim Data */ import java.io.*; import java.util.*; import javax.comm.*; public class SimpleWrite { static Enumeration portList; static CommPortIdentifier portId; static String messageString = "Hello, world!\n"; static SerialPort serialPort; static OutputStream outputStream; public static void main(String[] args) { portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { // if (portId.getName().equals("COM1")) { if (portId.getName().equals("/dev/term/a")) { try { serialPort = (SerialPort) portId.open("SimpleWriteApp", 2000); } catch (PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { //speed 9600, databit 8, //stopbit 1, parity none serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) {} try { //kirim Hello, World! outputStream.write(messageString.getBytes()); } catch (IOException e) {} } } } } }

RS232 DAN MODEM Apabila interface RS232 di gunakan secara lengkap, maka penggunaannya lebih cenderung pada penggunaan modem. Dan pada modem, umumnya, telah disediakan perintah-perintah yang dapat digunakan oleh pengembang program. Perintahperintah tersebut disebut dengan sebutan AT Command. Adapun perintah AT, bukan At atau at, adalah sebagai berikut : +++ Mode data dirubah menjadi mode perintah tanpa harus melakukan pemutusan hubungan. Perintah ini harus disertai dengan Enter A/ Mengulangi perintah terakhir ATA Menjawab panggilan secara manual ATBn Memilih protocol Bell or CCITT (ITU-T), model ini hanya berpengaruh pada modem dengan model V.22 atau V.21 n=0, CCITT V.22 atau V.21 n=1, Bell212 atau 103 ATDTn Melakukan kontak ke nomor telpon Contoh : ATDT021777777 ATEn Perintah Echo. Semua perintah yang dilakukan akan tampil kembali pada layar n=0, menon-aktifkan echo n=1, mengaktifkan echo ATHn Hangup n=0, Hang Up n=1, off ATIn Pendeteksi identitas pabrikan dan setting n=0, product code n=1, pengkalkulasian pertama n=2..3, prakiraan n=4, OEM String n=5..11, nilai ok n=12, Pengkakulasian ROM n=13, Versi RC n=14, Nama Pabrik Pembuat n=15, Pilihan Negara n=17, GSM Option n=18, Cek GSM Support ATLn Speaker Volume n=0, Suara Terkecil n=1, Suara Kecil n=2, Suara Sedang n=3, Suara Keras ATMn Pengontrolan Speaker n=0, speaker tidak bersuara n=1, speaker aktif jika terdapat penerimaan/pengiriman n=2, speaker selalu aktif n=3 speaker hanya aktif jika modem menjawab

ATQn

ATSn

ATZn

Respon balik modem ke computer n=0, modem melakukan respon pada computer n=1, modem tidak melakukan respon Melakukan penge-set-an dan membaca register atau melakukan autoanswer ATSn=x, Melakukan penge-set-an variable n dengan nilai 1 ATSn?, membaca register n Reset modem n=0, restore ke profil 0 n=1, restore ke profil 1

Perintah-perintah modem yang terdapat pada tabel merupakan sebagian dari perintah modem.

Bab II\

PEMROGRAMAN KOMUNIKASI PADA JARINGAN KOMPUTER


Jaringan komputer atau (network) adalah kumpulan komputer atau peralatan lainya yang dimungkin untuk mengirimkan atau menerima data satu dengan lainnya. Saat ini protocol jaringan yang paling dikenal adalah protocol IP (Internet Protokol). IP ini dikembangkan pertama kali untuk kepentingan militer Amerika yang menginginkan komputer-komputer mereka, yang berbeda-beda system operasi, dapat berkomunikasi satu dengan yang lainnya. Pada perkembangannya protocol ini digunakan diseluruh system operasi seperti Unix, Windows, Mac dan lain lain dengan jumlah port 65, 535. Bahkan peralatan-peralatan yang menggunakan komunikasi serial (RS232) telah diterapkan protocol IP. Penggunaan protocol IP secara global disebut Internet sedangkan untuk pemakaian pada internal sebuah organisasi disebut intranet. Sebagai ilustrasi dapat dilihat pada gambar dibawah ini :

Gambar 8. Jaringan Komputer Pada buku ini, pengenalan jaringan komputer tidak mendalam. Pembahasan lebih cenderung pada pemrograman java pada jaringan komputer. Program, yang menggunakan falitas jaringan komputer, dapat dilihat pada komputer sehari-hari yaitu game online, web browser (Ms. Internet Explorer, Netscape, FireFox) dan lain-lain. Saat pengguna komputer membuka salah satu situs web, contoh : www.yahoo.com, komputer pengguna melalui web browser nya melakukan permintaan koneksi pada komputer server dengan menggunakan protocol TCP/IP melalui port 80. Kemudian komputer server melakukan transaksi dan hasil transaksi tersebut dikirim kembali pada komputer pengguna.

Gambar 9. Pengiriman data melalui TCP/IP pada Web Browser Adapun hal-hal yang perlu diketahui mengenai singkatan pada penggunaan protocol IP - TCP, Transfer Code Protocol, berfungsi sebagai Layer mengidentitaskan pengiriman dan penerimaan paket data - UDP, User Datagram Protocol, berfungsi sebagai layer seperti TCP tetapi tidak memberikan tanda mengenai sampai atau tidaknya data. - Multicast, berfungsi sebagai layer pengirim berita ke seluruh komputer secara point to point (Broadcast). - Port, berfungsi sebagai jalur data secara logic pada IP . - URL, befungsi sebagai pemberi identitas dari alamat web - HTTP, Hypertext Transfer Protokol, adalah standarisasi protocol komunikasi antara web browser dan web server. - HTML, Hypertext Markup Language, adalah format utama dalam penggunaan web - XML, adalah pengembangan lanjutan dari HTML dimana penggunaannya lebih baku dibandingkan dengan HTML - FTP, File Transfer Protocol, berfungsi sebagai pengirim atau penerima file data - Email, Electronic Mail, berfungsi sebagai pengirim atau penerima surat elektronik. - SMTP, Simple Mail Transfer Protokol, adalah standar protocol untuk pengiriman surat elektronik - POP3, Post Office Protocol Versi 3, adalah standar penerimaan surat elektronik. - Telnet, adalah protocol yang digunakan untuk perintah interaktif - Proxy, berfungsi sebagai sharing internet.

MENDETEKSI PORT YANG DIGUNAKAN Fasilitas atau protokol yang terdapat pada server dapat dideteksi oleh program java. Begitu pula dengan penggunaan port TCP/IP pada komputer. Program test protocol :
//program diambil dan dimodifikasi dari //buku Java Network Programming hal :195 //Simpan File : ProtocolTester.java //Compile : javac ProtocolTester.java //Cara Menjalankan : java ProtocolTester import java.net.*; public class ProtocolTester { public static void main(String[] args) { String url = "www.bl.ac.id"; testProtocol ("http://" + url); testProtocol ("https://" + url); testProtocol ("ftp://" + url); testProtocol ("gopher://" + url); testProtocol ("nfs://" + url); testProtocol ("telnet://" + url); testProtocol ("mailto:windu@antara.co.id");

private static void testProtocol (String url) { try { URL u = new URL(url); System.out.println(u.getProtocol() + " is supported"); } catch (MalformedURLException e) { String protocol = url.substring(0, url.indexOf(':')); System.out.println(protocol + " is not Support"); } } }

Gambar 10. ProtocolTester Program untuk mencari port yang digunakan oleh server :
//program diambil dan dimodifikasi dari buku //Java Network Programming //hal :305 //Simpan File : LowPortScanner.java //Compile : javac LowPortScanner.java //Cara Menjalankan : java LowPortScanner import java.net.*; import java.io.*; public class LowPortScanner { public static void main (String[] args) { String host = "www.bl.ac.id";

} }

System.out.println("Tunggu Lagi Mendeteksi"); for (int i = 1; i <= 1024; i++) { try { Socket s = new Socket(host,i); System.out.println("Port " + i + " Digunakan " + host); }catch (UnknownHostException e){ System.err.println(e); break; }catch (IOException e) { System.out.println("Port " + i + " Tidak Digunakan " + host); } }

Gambar 11. LowPortScanner MENDOWLOAD HALAMAN WEB Bahasa pemrograman java dapat dengan mudah mendeteksi fasilitas yang digunakan sebuah server seperti HTTP, FTP, dll. Begitu juga dengan penggunaan port IP pada server. Salah contoh program kecil untuk mendowload sebuah halaman web
//Program diambil dari buku Java Networking Programming-Oreilly //Hal : 210 //Simpan File : SourceViewer.java //Compile : javac SourceViewer.java //Cara Menjalankan : java SourceViewer http://www.bl.ac.id import java.net.*; import java.io.*; public class SourceViewer { public static void main (String[] args) throws Throwable { if (args.length > 0) { try { URL u = new URL(args[0]); //Buka koneksi URL InputStream in = u.openStream(); //jika URL ditemukan //program membaca halaman web in = new BufferedInputStream(in); Reader r = new InputStreamReader(in); int c; while ((c = r.read()) != -1) { System.out.print((char) c); }

} } }

} catch (MalformedURLException e) { //Jika URL tidak ditemukan System.out.print(args[0] + " is not parseable URL"); }

Pada program SourceViewer.java apabila dijalankan, program tersebut mencoba melakukan koneksi kepada komputer server. Kemudian apabila URL telah berhasil terkoneksi maka program akan membaca format HTML.

Gambar 12. SourceViewer MENGIRIMKAN DAN MENERIMA EMAIL Email atau elektronic mail merupakan aplikasi yang paling banyak digunakan pada internet hingga sekarang. Protocol yang digunakan pada email adalah SMTP untuk pengiriman dan POP3 untuk penerimaan. Email dalam pengiriman maupun penerimaan menggunakan protocol TCP/IP. Sedangkan port yang digunakan adalah port 25 untuk pengiriman dan port 110 untuk penerimaan. JavaMail API adalah standar komponen sejak java 1.1 tetapi membutuhkan komponen dari java, yaitu mail.jar, imap.jar, mailapi.jar, pop3.jar, dan smtp.jar yang dapat didownload pada http://java.sun.com/products/javamail/ . JavaMail ini dapat diimplementasikan secara pemrograman murni java menggunakan socket dan stream. Program Kirim Email
//Program diambil dan dimodifikasi dari LKBN ANTARA //Simpan File : SendEmail.java //Compile : javac SendEmail.java //Cara Menjalankan : java SendEmail import javax.mail.*;

import javax.mail.internet.*; import java.util.*; public class SendEmail { public static void main(String[] args) { try { String NamaHost = "202.155.73.26"; String Kepada = "windu@antara.co.id"; String Dari = "retwin7678@yahoo.com"; Properties props = System.getProperties(); props.put("mail.smtp.host", NamaHost); Session session = Session.getInstance(props, null); Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(Dari)); InternetAddress[] address = {new InternetAddress(Kepada)}; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject("Testing"); msg.setContent("In program ngetest", "text/plain"); Transport.send(msg); } catch (Exception e) { e.printStackTrace(); } } }

Program Baca Email


//program diambil dan dimodifikasi dari Buku //Java Networking //Simpan File : POP3Client.java //Compile : javac POP3Client.java //Cara Menjalankan : java POP3Client import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class POP3Client { public static void main(String[] args) { Properties props = System.getProperties(); String host = "202.155.73.26"; String username = "windu"; String password = "xxxxxx"; //mau tau aja passnya String provider = "pop3"; try { //Koneksi POP3 mail server Session session = Session.getDefaultInstance(props, null); Store store = session.getStore(provider); store.connect(host,username,password); //buka folder Folder inbox = store.getFolder("INBOX"); if (inbox == null) { System.out.println("No Inbox"); System.exit(1); } inbox.open(Folder.READ_ONLY); //Tampilkan Pesan Surat Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { System.out.println("---- Message " + (i + 1) + " ----"); messages[i].writeTo(System.out); }

} }

//jangan lupa tutup koneksi inbox.close(false); store.close(); } catch (Exception e) { e.printStackTrace(); }

Apabila program POP3Client dijalankan maka akan tampil


C:\j2sdk1.4.2_05\bin\java.exe -classpath "C:\j2sdk1.4.2_05\jre\lib\rt.jar;C:\j2sdk1.4.2_05\lib\tools.jar;C:\j2sdk1.4.2_05 \javamail-1.3.2\mail.jar;C:\j2sdk1.4.2_05\javamail1.3.2\lib\imap.jar;C:\j2sdk1.4.2_05\javamail1.3.2\lib\mailapi.jar;C:\j2sdk1.4.2_05\javamail1.3.2\lib\pop3.jar;C:\j2sdk1.4.2_05\javamail1.3.2\lib\smtp.jar;C:\JBuilderX\lib\activation.jar;C:\data\belajar\bp4\test" POP3Client ---- Message 1 ---Return-Path: <retwin7678@yahoo.com> Delivered-To: windu@antara.co.id Received: (qmail 11857 invoked by uid 505); 21 Feb 2005 02:39:03 -0000 Received: from retwin7678@yahoo.com by mail.antara.co.id by uid 502 with qmailscanner-1.16 (clamscan: 0.54. Clear:. Processed in 0.458176 secs); 21 Feb 2005 02:39:03 -0000 Received: from unknown (HELO notebookwdg) (192.168.12.57) by mail.antara.co.id with SMTP; 21 Feb 2005 02:39:02 -0000 Message-ID: <27994366.1108961448718.JavaMail.Administrator@notebookwdg> From: retwin7678@yahoo.com To: windu@antara.co.id Subject: TEsting MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit In program ngetest

FTP CLIENT Pada Bahasa Program Java telah menyediakan Komponen untuk membuat File Transfer Protocol Client. Komponen tersebut adalah import sun.net.ftp.FtpClient. Pada contoh program dibawah sebutkanlah nama atau ip dari server, nama user, password, direktori client, nama file penyimpanan pada client, dan nama file pada komputer server.
//FtpClientDemo.java //Diambil dari www.java2s.com import import import import import import import java.io.File; java.io.FileInputStream; java.io.FileOutputStream; java.io.IOException; java.io.InputStream; java.io.OutputStream; java.util.StringTokenizer;

import sun.net.TelnetInputStream; import sun.net.ftp.FtpClient;

public class FtpClientDemo { public static int BUFFER_SIZE = 10240; private FtpClient m_client; // set the values for your server private String host = ""; private String user = ""; private String password = ""; private String sDir = ""; private String m_sLocalFile = ""; private String m_sHostFile = ""; public FtpClientDemo() { try { System.out.println("Connecting to host " + host); m_client = new FtpClient(host); m_client.login(user, password); System.out.println("User " + user + " login OK"); System.out.println(m_client.welcomeMsg); m_client.cd(sDir); System.out.println("Directory: " + sDir); m_client.binary(); System.out.println("Success."); //getFile(); //putFile(); } catch (Exception ex) { System.out.println("Error: " + ex.toString()); } } protected void disconnect() { if (m_client != null) { try { m_client.closeServer(); } catch (IOException ex) { } m_client = null; } } public static int getFileSize(FtpClient client, String fileName) throws IOException { TelnetInputStream lst = client.list(); String str = ""; fileName = fileName.toLowerCase(); while (true) { int c = lst.read(); char ch = (char) c; if (c < 0 || ch == '\n') { str = str.toLowerCase(); if (str.indexOf(fileName) >= 0) { StringTokenizer tk = new StringTokenizer(str); int index = 0; while (tk.hasMoreTokens()) { String token = tk.nextToken(); if (index == 4) try { return Integer.parseInt(token); } catch (NumberFormatException ex) { return -1; } index++; }

} str = ""; } if (c <= 0) break; str += ch; } return -1; } protected void getFile() { if (m_sLocalFile.length() == 0) { m_sLocalFile = m_sHostFile; } byte[] buffer = new byte[BUFFER_SIZE]; try { int size = getFileSize(m_client, m_sHostFile); if (size > 0) { System.out.println("File " + m_sHostFile + ": " + size + " bytes"); System.out.println(size); } else System.out.println("File " + m_sHostFile + ": size unknown"); FileOutputStream out = new FileOutputStream(m_sLocalFile); InputStream in = m_client.get(m_sHostFile); int counter = 0; while (true) { int bytes = in.read(buffer); if (bytes < 0) break; out.write(buffer, 0, bytes); counter += bytes;

} out.close(); in.close(); } catch (Exception ex) { System.out.println("Error: " + ex.toString()); }

protected void putFile() { if (m_sLocalFile.length() == 0) { System.out.println("Please enter file name"); } byte[] buffer = new byte[BUFFER_SIZE]; try { File f = new File(m_sLocalFile); int size = (int) f.length(); System.out.println("File " + m_sLocalFile + ": " + size + " bytes"); System.out.println(size); FileInputStream in = new FileInputStream(m_sLocalFile); OutputStream out = m_client.put(m_sHostFile); int counter = 0; while (true) { int bytes = in.read(buffer); if (bytes < 0) break; out.write(buffer, 0, bytes); counter += bytes; System.out.println(counter); } out.close(); in.close(); } catch (Exception ex) { System.out.println("Error: " + ex.toString()); }

public static void main(String argv[]) { new FtpClientDemo(); }

MENGGUNAKAN TCP/IP Transfer Code Protocol/Internet Protocol adalah protocol yang paling banyak digunakan pada system komputer masa kini dibandingkan dengan protocol lainnya seperti IPX (Novell), AppleTalk (Machintos), NetBUI (Windows), dan lain-lain. Pada contoh implementasi TCP/IP seperti FTP (port 21), Telnet (port 23), SMTP (port 25), POP3 (port 110), HTTP (port 80), dan lain-lain. Pada pembahasan TCP/IP ini, contoh program menggambarkan penggunaan port, bagaimana komputer pengguna mencoba melakukan koneksi pada komputer server kemudian melakukan interaktif. Dalam implementesinya program ini merupakan contoh kecil dari program chatting. Program Server 1
//program diambil dan dimodifikasi dari java.sun.com //Simple Network TCP/IP programm //Simpan File : KnockKnockProtocol.java //Compile : javac KnockKnockProtocol.java //SubClass Dari : KnockKnockServer.java import java.net.*; import java.io.*; public class KnockKnockProtocol { private static final int WAITING = 0; private static final int SENTKNOCKKNOCK = 1; private static final int SENTCLUE = 2; private static final int ANOTHER = 3; private static final int NUMJOKES = 5; private int state = WAITING; private int currentJoke = 0; private String[] clues = { "Indra", "Sinta", "James", "Dian", "Pswasnita" }; private String[] answers = { "Nyalakan Penghangat, Dingin Nich..!", "Taunya Kamu Bisa Nyanyi!", "Doa Untuk Mu!", "Ada Burung Di sini?", "Bisa Terlihat?" }; public String processInput(String theInput) { String theOutput = null; if (state == WAITING) { theOutput = "Tok... Tok... Tok..."; state = SENTKNOCKKNOCK; } else if (state == SENTKNOCKKNOCK) { if (theInput.equalsIgnoreCase("Siapa Yach?")) { theOutput = clues[currentJoke]; state = SENTCLUE; } else { theOutput = "Seharusnya \"Siapa Yach?\"! " + "Coba Lagi. Tok... Tok... Tok...!";

} } else if (state == SENTCLUE) { if (theInput.equalsIgnoreCase(clues[currentJoke] + " siapa?")) { theOutput = answers[currentJoke] + " Ingin Orang Lain? (y/n)"; state = ANOTHER; } else { theOutput = "Seharusnya \"" + clues[currentJoke] + " siapa?\"" + "! Coba Lagi. Tok.. Tok.. Tok..."; state = SENTKNOCKKNOCK; } } else if (state == ANOTHER) { if (theInput.equalsIgnoreCase("y")) { theOutput = "Tok... Tok... Tok..."; if (currentJoke == (NUMJOKES - 1)) currentJoke = 0; else currentJoke++; state = SENTKNOCKKNOCK; } else { theOutput = "Dadah"; state = WAITING; } } return theOutput; } }

Program Server 2
//program diambil dan dimodifikasi dari java.sun.com //Simple Network TCP/IP programm //Simpan File : KnockKnockServer.java //Compile : javac KnockKnockServer.java //Cara Menjalankan : java KnockKnockServer import java.net.*; import java.io.*; public class KnockKnockServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(4444); System.out.println("Okeh .. Server Ready"); } catch (IOException e) { System.err.println("port 4444 Tidak Dapat Digunakan"); System.exit(1); } Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.err.println("Gagal Menggunakan Socket."); System.exit(1); } PrintWriter out = new PrintWriter (clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( clientSocket.getInputStream())); String inputLine, outputLine; KnockKnockProtocol kkp = new KnockKnockProtocol();

outputLine = kkp.processInput(null); out.println(outputLine); while ((inputLine = in.readLine()) != null) { outputLine = kkp.processInput(inputLine); out.println(outputLine); if (outputLine.equals("Dadah")) break; } out.close(); in.close(); clientSocket.close(); serverSocket.close();

} }

Program Client
//program diambil dan dimodifikasi dari java.sun.com //Simple Network TCP/IP programm //Simpan File : KnockKnockClient.java //Compile : javac KnockKnockClient.java //Cara Menjalankan : java KnockKnockClient import java.io.*; import java.net.*; public class KnockKnockClient { public static void main(String[] args) throws IOException { Socket kkSocket = null; PrintWriter out = null; BufferedReader in = null; try { kkSocket = new Socket("localhost", 4444); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader( new InputStreamReader ( kkSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("nga Ada Tuch host: localhost."); System.exit(1); } catch (IOException e) { System.err.println ("koneksi I/O Host : Localhost Gagal."); System.exit(1); } BufferedReader stdIn = new BufferedReader( new InputStreamReader( System.in)); String fromServer; String fromUser; while ((fromServer = in.readLine()) != null) { System.out.println("Server: " + fromServer); if (fromServer.equals("Dadah.")) break; fromUser = stdIn.readLine(); if (fromUser != null) { System.out.println("Client: " + fromUser); out.println(fromUser); }

out.close(); in.close(); stdIn.close(); kkSocket.close();

Cara menjalankan : 1. Buka layar Dos (cmd) kemudian Aktifkan Program Server :
java KnockKnockServer

hingga tampil tanda


Okeh .. Server Ready

Gambar 13. KnockKnockServer 2. Buka layar Dos (cmd) lagi kemudian Aktifkan Program Client
java KnockKnockClient

hingga tampil tanda

Server: Tok... Tok... Tok....

Gambar 14. KnockKnocClient 3. Teruskan interaktifnya. MENGGUNAKAN UDP Seperti yang telah dibahas sebelumnya, penggunaan UDP sedikit berbeda dengan TCP. Jika pengiriman data pada TCP, protocol TCP ini harus memastikan apakah data telah sampai pada komputer target. Apabila tidak sampai atau terdapat kerusakan pada pengiriman data maka TCP akan melakukan pengiriman ulang. UDP merupakan protocol alternatif untuk pengiriman data pada IP. UDP ini terkenal dengan kecepatannya dalam pengiriman data dikarenakan pada pengiriman data tidak dilakukan pengecekan berulang-ulang. Pengiriman langsung sampai pada tujuan. Penggunaan UDP dapat diibaratkan seperti penggunaan telpon. Pada saat melakukan penekanan nomor maka telpon ajan menuju nomor tujuan. Ketika sudah terkoneksi maka pembicaraan berlanjut tanpa peduli apakah suara sampai atau tidak ke lawan bicara.

Sebagai contoh pada program UDP ini terdapat dua aplikasi yaitu server side dan client side. Server side terdiri dari UDPServer.java dan UDPEchoServer.java. Sedangkan Client side terdiri dari SenderThread.java, ReceiverThread.java dan UDPEchoClient.java Program Server 1
//program diambil dan dimodifikasi dari buku //Java Network Programming //hal : 440 //Simpan File : UDPServer.java //Compile : javac UDPServer.java //Sub Class : UDPEchoServer.java import java.net.*; import java.io.*; public abstract class UDPServer extends Thread { private int bufferSize; protected DatagramSocket ds; public UDPServer (int port, int bufferSize) throws SocketException { this.bufferSize = bufferSize; this.ds = new DatagramSocket (port); } public UDPServer (int port) throws SocketException { this (port, 8192); } public void run () { byte[] buffer = new byte[bufferSize]; while (true) { DatagramPacket incoming = new DatagramPacket (buffer, buffer.length); try { ds.receive(incoming); this.respond(incoming); } catch (IOException e) { System.err.println(e); } } //end while } public abstract void respond(DatagramPacket request); }

Program Server 2
//program diambil dan dimodifikasi dari buku //Java Network Programming //hal : 443 //Simpan File : UDPEchoServer.java //Compile : javac UDPEchoServer.java //Cara Menjalankan : java UDPServer import java.net.*; import java.io.*; public class UDPEchoServer extends UDPServer { public final static int DEFAULT_PORT = 7; public UDPEchoServer() throws SocketException { super (DEFAULT_PORT); System.out.println("Server Started"); } public void respond (DatagramPacket packet){

try {

DatagramPacket outgoing = new DatagramPacket(packet.getData(), packet.getLength(), packet.getAddress(), packet.getPort()); String s = new String ( outgoing.getData(), 0, outgoing.getLength()); System.out.println(s); s = "Echo >> " + s; byte[] sendback = s.getBytes(); DatagramPacket sendout = new DatagramPacket( sendback, sendback.length, packet.getAddress(), packet.getPort()); ds.send(sendout);

} catch (IOException e) { System.err.println(e); } } public static void main(String[] args) { try { UDPEchoServer server = new UDPEchoServer(); server.start(); } catch (SocketException e) { System.err.println(e); } } }

Program Client 1
//program diambil dan dimodifikasi dari buku //Java Network Programming //hal : 448 //Simpan File : ReceiverThread.java //Compile : javac ReceiverThread.java //Sub Class : UDPEchoClient.java import java.net.*; import java.io.*; public class ReceiverThread extends Thread { DatagramSocket socket; private boolean stopped = false; public ReceiverThread (DatagramSocket ds) throws SocketException { this.socket = ds; } public void halt() { this.stopped = true; } public void run () { byte[] buffer = new byte[65507]; while (true) { if (stopped) return; DatagramPacket dp = new DatagramPacket (buffer, buffer.length); try { socket.receive(dp); String s = new String (dp.getData(), 0, dp.getLength());

System.out.println(s); Thread.yield(); } catch (IOException e) { System.err.println(e); } } } }

Program Client 2
//program diambil dan dimodifikasi dari buku //Java Network Programming //hal : 446 //Simpan File : SenderThread.java //Compile : javac SenderThread.java //Sub Class : UDPEchoClient.java import java.net.*; import java.io.*; public class SenderThread extends Thread { private InetAddress server; private DatagramSocket socket; private boolean stopped = false; private int port; public SenderThread (InetAddress ia, int port) throws SocketException { this.server = ia; this.socket = new DatagramSocket(); this.port = port; } public void halt() { this.stopped = true; } public DatagramSocket getSocket() { return this.socket; } public void run() { try { BufferedReader userInput = new BufferedReader ( new InputStreamReader (System.in)); while (true) { if (stopped) return; String theLine = userInput.readLine(); if (theLine.equals(".")) break; byte[] data = theLine.getBytes(); DatagramPacket output = new DatagramPacket ( data, data.length, server, port); socket.send(output); Thread.yield(); } } catch (IOException e ) { System.err.println(e); } } }

Program Client 3
//program diambil dan dimodifikasi dari buku //Java Network Programming

//hal : 445 //Simpan File : UDPEchoClient.java //Compile : javac UDPEchoClient.java //Cara Menjalankan : java UDPEchoClient import java.net.*; import java.io.*; public class UDPEchoClient { public final static int DEFAULT_PORT = 7; public static void main(String[] args) { String hostname = "localhost"; int port = DEFAULT_PORT; if (args.length > 0) { hostname = args[0]; } try { InetAddress ia = InetAddress.getByName(hostname); SenderThread sender = new SenderThread (ia, DEFAULT_PORT); sender.start(); ReceiverThread receiver = new ReceiverThread(sender.getSocket()); receiver.start(); } catch (UnknownHostException e) { System.err.println(e); } catch (SocketException se){ System.err.println(se); } } }

Cara menjalankan : 1. Buka layar dos (cmd), kemudian aktifkan program server
java UDPEchoServer

Hingga tampil tanda


Server Started

Gambar 15. UDPEchoServer 2. Buka layar dos (cmd), kemudian aktifkan program client
Java UDPEchoClient

Ketikkan kalimat, contoh : testing Tekan Enter hingga layar menampilkan hasil dari input-an keyboard

Gambar 16. UDPEchoClient MENGIRIMKAN DATA SECARA BROADCAST/MULTICASTING Multicasting adalah point-to-point communication dengan system broadcast. Multicasting mengirimkan data dari satu host/server ke berbagai tujuan. Protocol ini dapat berjalan pada jaringan internet, intranet dan DVB/IP (Data Video Broadcasting). Pada umumnya protocol ini digunakan apabila usernya bersifat broadcast atau satu arah untuk publik, karena siapapun dapat menerima data tanpa kecuali. Multicast address seperti IP address umumnya, sedangkan range IP nya dari 224.0.0.0 sampai dengan 239.255.255.255 (class D). Pemrograman multicasting pada java seperti TCP dengan portnya. Begitu pula sisi program dilihat dari server dan client. Program Server
//program diambil dan dimodifikasi dari //Litbang LKBN ANTARA //Simpan File : TimeServer.java //Compile : javac TimeServer.java //Cara Menjalankan : java TimeServer import java.net.*; import java.io.*; import java.util.*; public class TimeServer { public static void main (String[] args) throws IOException { MulticastSocket socket = new MulticastSocket(8890); socket.setTTL((byte)5); while (true) { try {

byte[] buff = new byte [256]; String timeofday = new Date().toString(); buff = timeofday.getBytes(); System.out.println(timeofday); InetAddress group = InetAddress.getByName("230.1.1.1");

DatagramPacket packet = new DatagramPacket (buff, buff.length, group, 8890); socket.send(packet); java.lang.Thread.sleep((long) 2000); } catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) { break;}

socket.close(); } }

Program Client
//program diambil dan dimodifikasi dari //Litbang LKBN ANTARA //Simpan File : TimeClient.java

//Compile : javac TimeClient.java //Cara Menjalankan : java TimeClient import java.net.*; import java.io.*; public class TimeClient { public static void main (String[] args) throws IOException { MulticastSocket socket = new MulticastSocket(8890); InetAddress address = InetAddress.getByName("230.1.1.1"); socket.joinGroup(address); for (int i = 0; i < 1000; i++) { byte[] buff = new byte[256]; DatagramPacket packet = new DatagramPacket (buff, buff.length); socket.receive(packet); String received = new String (packet.getData()); System.out.println("Received: " + received); } socket.leaveGroup(address); socket.close();

} }

Cara Menjalankan : 1. Buka layar dos (cmd) kemudian aktifkan program server
java TimeServer

Sehingga keluar tanggal dan jam

Gambar 17. TimeServer 2. Buka layar dos (cmd) kemudian aktifkan program client
java TimeClient

Sehingga keluar

Gambar 18. TimeClient

APPLET Applet adalah pemrograman yang menggunakan bahasa pemrograman java dan dapat di integrasikan pada HTML sehingga program tersebut dapat di tampilkan pada web browser. Salah contoh penggunaan aplikasi java applet di internet ada pada homepage http://games.yahoo.com. Adapun hirarki dari applet yaitu

Gambar 19. Hirarki Applet Contoh Pemrograman Applet : - Bukalah notepad dan tulis isinya :
Import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class SimpleApplet extends Applet{ String text; //inisialisasi public void init() { text = "I'm a simple applet"; setBackground(Color.cyan); } //saat applet dijalankan public void start() { System.out.println("starting..."); } //saat applet berhenti public void stop() { System.out.println("stopping..."); } //saat applet public void destroy() { System.out.println("preparing to unload..."); } //membuat tampilan public void paint(Graphics g){ System.out.println("Paint"); g.setColor(Color.blue); g.drawRect(0, 0,

getSize().width -1, getSize().height -1); g.setColor(Color.red); g.drawString(text, 15, 25); } }

Simpan dengan nama SimpleApplet.java Compile program java tersebut


javac SimpleApplet.java

Buka notepad lainnya dengan isi


<HTML> <BODY> <APPLET CODE=SimpleApplet.class WIDTH=200 HEIGHT=100> </APPLET> </BODY> </HTML>

Simpan dengan nama simple.html Jalankan dengan menggunakan perintah


appletviewer simple.html

Atau dengan dengan membuka web browser seperti Ms. Internet Explorer

Gambar 20. Ms. Internet Explorer Applet simple.html Program applet juga dapat menampilkan model grafik seperti pada contoh kedua yang diambil dari contoh j2sdk1.4.01.
//Copyright (c) 2003 Sun Microsystems, Inc. All //GraphApplet.java 1.7 03/01/23 //Compile : javac GraphApplet //Cara Menjalankan : pada graph.html import java.awt.Graphics; Rights Reserved.

public class GraphApplet extends java.applet.Applet { double f(double x) { return (Math.cos(x/5) + Math.sin(x/7) + 2) * getSize().height / 4; } public void paint(Graphics g) { for (int x = 0 ; x < getSize().width ; x++) { g.drawLine(x, (int)f(x), x + 1, (int)f(x + 1)); }

} public String getAppletInfo() { return "Draws a sin graph."; } } <!--Nama File : Graph1.html <!--Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. <html> <head> <title>Simple Graph (1.1)</title> </head> <body> <h1>Simple Graph(1.1)</h1> <hr> <applet code=GraphApplet.class width=300 height=120> alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason." Your browser is completely ignoring the &lt;APPLET&gt; tag! </applet> <hr> </body> </html>

Untuk mendapatkan contoh <java_installation>\demo\applets

lainnya

dapat

dilihat

pada

BAB III

JAVA 2 MICRO EDITION


Java 2 Micro Edition (J2ME) adalah program yang disediakan oleh SUN Microsystem untuk menjawab kebutuhan oleh pengembang program, khususnya pengembang program untuk alat-alat terbatas seperti Handphone, PDA dan lainlain. Ada 2 (dua) macam alat terbatas tersebut yaitu CDC (Connected Device Connectivity) dan CLDC (Connected Limited Device Connectivity). Perbandingan antara CDC dan CLD adalah sebagai berikut : CLDC CDC Mengimplitasikan subset dari J2SE Mengimplementasikan seluruh fitur pada J2SE JVM yang digunakan dikenal dengan JVM yang dikenal dengan nama CVM nama KVM Digunakan pada perangkat handheld Digunakan pada perangkat handheld dengan ukuran memori terbatas (160- dengan ukuran memori minimal 2 512 Kbytes) Mbytes Prosesor : 16 Bit atau 32 Bit Prosesor : 32 Bit Contoh : Handphone (Nokia, Contoh : Internet TV, Nokia Samsung, Palm, dan lain-lain), PDA, Communicator dan Car Television Pocket PC dan two way pager. J2ME merupakan subset program Java 2 Standard Edition (J2SE), karena itulah pada saat peng-install-an J2ME Wireless Toolkit harus terlebih dahulu melakukan instalasi J2SE. Adapun cara mengembangkan program J2ME adalah sebagai berikut :

Gambar 21. Pemrograman J2ME

Pada saat instalasi, akan membentuk default direktori yaitu c:\WTK104. Masukkan file C:\WTK104\lib\midpapi.zip sebagai classpath. Sehingga pada editor yang digunakan class microedition aktif dengan menuliskan pada editor adalah sebagai berikut : import javax.microedition.lcdui.*; import javax.microedition.midlet.*; Pada pembuatan aplikasi J2ME minimal terdapat 2 (dua) class yang digunakan untuk membuat aplikasi, yaitu lcdui dan midlet. Class lcdui digunakan untuk membuat interface, sedangkan midlet digunakan untuk terdiri dari class yang digunakan sebagai lifecycle dari program. Class pada midlet ini mempunyai sifat abstract seperti : protected abstract void startApp() throws MIDletStateChangeException; protected abstract void pauseApp(); protected abstract void destroyApp(boolean flag) throws MIDletStateChangeException; Gambar Abstrak new() Paused Destroyed destroyApp() 22. Program J2ME

Setelah program telah dibuat, startApp() pauseApp() dikompilasi dan diverivikasi Active kemudian destroyApp() program tersebut dapat dilihat pada emulator handphone yang tersedia pada program J2ME wireless Toolkit. Contoh pembuatan program sederhana, 1. Bukalah program KTOOLBAR pada menu START PROGRAM J2ME Wireless Tollkit KTOOLBAR

Gambar 23. KTOOLBAR

2. Buatlah projek baru (new project), dengan nama projek HelloWorld dan Midlet Class Name dengan nama HelloMIDlet

Gambar 24. Membuat Projek Baru J2ME Apabila dilakukan pembuatan projek (create project), maka J2ME Wireless Toolkit program akan membentuk direktori HelloWorld pada direktori C:\WKT104\apps 3. Kemudian buatlah program dengan nama HelloMIDlet.java pada direktori C:\WKT104\apps\HelloWorld\src

Gambar 25. Direktori J2ME


import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class HelloMIDlet extends MIDlet implements CommandListener { private Form mMainForm; public HelloMIDlet(){ mMainForm = new Form("Hello World"); mMainForm.append(new StringItem(null, "Hello Teman Teman Budiluhur")); mMainForm.addCommand(new Command("Exit", Command.EXIT,0)); mMainForm.setCommandListener(this); } public void startApp() { Display.getDisplay(this).setCurrent(mMainForm); } public void pauseApp() {} public void destroyApp(boolean unconditional){} public void commandAction(Command c, Displayable s) { notifyDestroyed(); }

4. Tekan tombol RUN, jika tidak terdapat masalah dengan program maka akan tampil emulator handphone

Gambar 26. Emulator J2ME Form Nama Project Nama Midlet Nama Program Simpan File Aplikasi : mahasiswa : mahasiswa : mahasiswa.java : c:\wtk104\apps\mahasiswa\src\mahasiswa.java : mahasiswa.jad, mahasiswa.jar

Gambar 27. Membuat Form Pada J2ME


Import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class mahasiswa extends MIDlet implements CommandListener { private Display display; private Alert alert; private Ticker ticker; private Form f;

private private private private private private private

TextField TextField ChoiceGroup ChoiceGroup ChoiceGroup Command Command

txtNim; txtNama; cgSertifikat; cgJurusan; cgKampus; exitCmd; subCmd;

public mahasiswa() {} public void startApp() { alert ticker txtNim txtNama = = = = new new new new Alert("Universitas Budi Luhur"); Ticker("Entry Data Untuk Data Mahasiswa"); TextField("Nim","",10,TextField.ANY); TextField("Nama","", 25, TextField.ANY);

//check box (multiselect) cgSertifikat = new ChoiceGroup("Sertifikat", Choice.MULTIPLE); cgSertifikat.append("SD", null); cgSertifikat.append("SMP", null); cgSertifikat.append("SMA", null); //radio button (pilih salah satu) cgJurusan = new ChoiceGroup("Jurusan", Choice.EXCLUSIVE); cgJurusan.append("TI",null); cgJurusan.append("MI", null); cgJurusan.append("AK", null); cgJurusan.append("TK", null); cgKampus = new ChoiceGroup("Kampus", Choice.EXCLUSIVE); cgKampus.append("Cempaka Mas", null); cgKampus.append("Ciledug", null); cgKampus.append("Salemba", null); cgKampus.append("Roxy", null); display = Display.getDisplay(this); f = new Form("Mahasiswa"); f.append(txtNim); f.append(txtNama); f.append(cgSertifikat); f.append(cgJurusan); f.append(cgKampus); f.setTicker(ticker); exitCmd = new Command("Keluar", Command.EXIT,2); subCmd = new Command("Submit", Command.OK,2); f.addCommand(subCmd); f.addCommand(exitCmd); f.setCommandListener(this); display.setCurrent(alert,f); } public void pauseApp() {} public void destroyApp(boolean unconditional) { notifyDestroyed(); } public void keluar() { this.destroyApp(true); } public void awal() { startApp(); } public void tampil(){ StringItem stNim StringItem stNama = new StringItem("",txtNim.getString()); = new StringItem("",txtNama.getString());

String sSertifikat = ""; if (cgSertifikat.isSelected(0)) sSertifikat = cgSertifikat.getString(0); if (cgSertifikat.isSelected(1)) sSertifikat = sSertifikat + ", " + cgSertifikat.getString(1); if (cgSertifikat.isSelected(2)) sSertifikat = sSertifikat + ", " + cgSertifikat.getString(2); StringItem stSertifikat = new StringItem(""," Sertifikat " + sSertifikat); StringItem stJurusan = new StringItem(""," Jurusan " + cgJurusan.getString( cgJurusan.getSelectedIndex() ) ); StringItem stKampus = new StringItem(""," Kampus " + cgKampus.getString( cgKampus.getSelectedIndex() ) ); Form f2 = new Form ("Tampilkan Data"); f2.append(stNim); f2.append(stNama); f2.append(stSertifikat); f2.append(stJurusan); f2.append(stKampus); Command awalCmd = new Command("Awal", Command.OK,2); f2.addCommand(awalCmd); f2.setCommandListener(this); } display.setCurrent(f2);

public void commandAction(Command c, Displayable d) { String lbl = c.getLabel(); if (lbl.equals("Keluar")) { keluar(); }else if(lbl.equals("Submit")) { tampil(); }else if(lbl.equals("Awal")) { awal(); } }

Grafik Nama Project Nama Midlet Nama Program Simpan File Aplikasi : bendera : bendera : bendera.java : c:\wtk104\apps\ bendera \src\ bendera.java : bendera.jad, bendera.jar

Gambar 28. Gambar Bendera dengan J2ME

Import javax.microedition.lcdui.*; import javax.microedition.midlet.*; class canvasBendera extends Canvas { public void paint(Graphics g) { g.setColor(0,0,0); g.drawRect(0,0,getWidth(), getHeight()/2); g.setColor(255,0,0); g.fillRect(1,1, getWidth() -1, getHeight()/4); g.setColor(255,255,255); g.fillRect(1, getHeight()/4, getWidth()-1,getHeight()/4); g.setColor(0,0,255); g.drawString("Indonesia Merdeka", getWidth()/2 , getHeight()/2 + 10, g.TOP | g.HCENTER); g.setColor(0,255,0); g.drawString("17 Agustus 1945", getWidth()/2 , getHeight()/2 + 20, g.TOP | g.HCENTER); } } public class bendera extends MIDlet { private Display display; public bendera() {} public void startApp() { display = Display.getDisplay(this); Canvas canvas = new canvasBendera(); display.setCurrent(canvas); } public void pauseApp () {} public void destroyApp (boolean unconditional) {} }

Gauge Nama Project Nama Midlet Nama Program Simpan File Aplikasi : gaugeChange : gaugeChange : gaugeChange.java : c:\wtk104\apps\ gaugeChange\src\ gaugeChange.java : gaugeChange.jad, gaugeChange.jar

Gambar 29. Gauge


import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class gaugeChange extends MIDlet implements ItemStateListener { private private private private private Display display; Form f; TextBox t; Gauge g; StringItem s;

public gaugeChange(){} public void startApp() { f = new Form("Informasi Nilai"); g = new Gauge("Nilai", true,10,0); f.append(g); f.setItemStateListener(this); Display.getDisplay(this).setCurrent(f); } public void pauseApp() {} public void destroyApp (boolean unconditional){}; public void itemStateChanged(Item t) { Integer val = new Integer(g.getValue()); s = new StringItem("Nilai :" , val.toString()); if(f.size() == 1) f.append(s); else f.set(f.size()-1,s); }

Penggunaan Tanggal / Date - Nama Project - Nama Midlet - Nama Program - Simpan File - Aplikasi

: itemChange : itemChange : itemChange.java : c:\wtk104\apps\itemChange\src\ itemChange.java : itemChange.jad, itemChange.jar

Gambar 30. Penggunaan Date Pada J2ME


import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class itemChange extends MIDlet implements ItemStateListener { private private private private Display display; Form f; TextBox t; DateField d;

public itemChange() {} public void startApp() { f = new Form("Informasi Waktu"); d = new DateField("Today's date", DateField.DATE); f.append(d); f.setItemStateListener(this); Display.getDisplay(this).setCurrent(f);

public void pauseApp() {} public void destroyApp(boolean unconditional) {} public void itemStateChanged(Item t) { StringItem s = new StringItem("","Anda Telah Memasukkan Harga"); f.append(s); }

Keypress -

Nama Project Nama Midlet Nama Program Simpan File Aplikasi

: pindahkotak : pindahkotak : pindahkotak.java : c:\wtk104\apps\pindahkotak\src\pindahkotak.java : pindahkotak.jad, pindahkotak.jar

Gambar 31. Pindah Kotak


/* Diambil dari buku pemrograman aplikasi wireless dengan java Adi Wicaksono halaman 150 */ import javax.microedition.lcdui.*; import javax.microedition.midlet.*; class pindahkotakCanvas extends Canvas { private int x = 0; //Absis private int y = 0; //Ordinat private int w = 10; //Width private int h = 10; //Height public void paint (Graphics g) { g.setColor(255,255,255); g.fillRect(0,0, getWidth(), getHeight()); g.setColor(255,0,0); g.fillRect(x,y,w,h); } protected void keyPressed(int Keycode) { int action = getGameAction(Keycode); if (action == RIGHT) x += w; else if (action == LEFT) x -= w; else if (action == DOWN) y += h; else if (action == UP) y -= h; if (x < 0) x = 0; if (y < 0) y = 0;

if ((x+w) >= getWidth()) x = getWidth() - w; if ((y+h) >= getHeight()) y = getHeight() - y; repaint(); } } public class pindahkotak extends MIDlet { private Display display; public void pindahkotak() {} public void startApp(){ Display display = Display.getDisplay(this); Canvas canvas = new pindahkotakCanvas(); display.setCurrent(canvas); } public void pauseApp(){} public void destroyApp(boolean unconditional){} }

MENYIMPAN DATA PADA J2ME (Ditulis oleh Gerry) Dalam sebuah perangkat Handphone yang berbasis Java yang bisa menjalankan MIDlet, disediakan media untuk penyimpanan yang bersifat nonvolatile. Artinya, data tidak akan hilang ketika Handphone dimatikan. Media penyimpanan non-volatile ini dalam MIDlet dikenal dengan nama RMS [Record Management System]. Record Management System [RMS] RMS merupakan implementasi database sederhana untuk digunakan dalam MIDlet Java yang berorientasi record. Jika aplikasi anda ingin memanfaatkan fasilitas RMS ini, Anda harus mengimport paket javax.microedition.rms.* .Didalam nya terdapat class-class untuk manajemen RMS salah satunya class Record Store yang menyediakan fungsi-fungsi untuk menambah, mengubah, menghapus data dan manipulasi lainnya. Paket javax.microedition.rms Paket ini menyediakan fungsi-fungsi untuk implementasikan database RMS pada MIDlet. Paket ini terdiri atas:

Interface RecordComparator Mendefinisikan komparator atau pembanding ketika melakukan komparasi/perbandingan antara 2 record. RecordEnumerator Merepresentasikan enumerator record yang bersifat biderictional(dua arah) RecordFilter Mendefinisikan filter yang digunakan untuk menganalisis sebuah record pada RecordStore, apakah memenuhi kriteria tertentu sesuai dengan filter yang diberikan atau tidak. RecordListener Mendeteksi record yang ditambahkan, diubah, atau dihapus dalam sebuah RecordStore. Kelas (Class) RecordStore Merupakan kelas utama yang harus Anda gunakan untuk membuat objek RecordStore. Exception InvalidRecordIDException Jika ditemukan RecordId yang tidak valid, eksepsi ini akan dilemparkan. RecordStoreException Eksepsi umum yang digunakan jika terjadi kesalahan pada manajemen Objek RecordStore. RecordStoreFullException Jika tempat penyimpanan RecordStore sudah penuh. RecordStoreNotFoundException Jika tempat penyimpanan RecordStore tidak ditemukan. RecordStoreNotOpenException Jika tempat penyimpanan RecordStore tidak dibuka (opened). Bentuk Logic data dari RecordStore RecordID 1 2 3 Data Array of Bytes Array of Bytes Array of Bytes

Secara logic hanya ada 2 kolom saja yaitu kolom RecordID dan kolom Data. RecordId merupakan primary key. RecordID merupakan sebuah nilai Integer yang diawali dari nomor 1 dan bersifat auto increment artinya untuk record berikutnya nilai RecordID berikutnya akan secara otomatis bertambah 1 dari nilai RecordId yang sebelumnya. Sedangkan kolom data merupakan rangkaian atau kumpulan byte array hasil dari konversi data kita ke berupa byte array.

Method-method pada class RecordStore :


void closeRecordStore() void deleteRecordStore(String recordStoreName) String[] listRecordStores() int addRecord(byte[] data, int offset, int numBytes) void setRecord(int recordId, byte[] newData, int offset, int numBytes) void deleteRecord (int recordId) byte[] getRecord (int recordId) int getRecord (int recordId, byte[] buffer, int offset) int getRecordSize (int recordId) int getNextRecordID() int getNumRecords() long getLastModified() int getVersion() String getName() int getSize() int getSizeAvailable() void addRecordListener (RecordListener listener)

Bedah Program Aplikasi MIDlet Database Mahasiswa Universitas Budi Luhur Konsep Record Store dbMhs Kita ambil kesepakatan nama Record Store kita adalah dbMhs. Yang nantinya akan dimasukkan data NIM, Nama, Sertifikat, Jurusan, Kampuz ( ada 5 Field). Secara Logic-nya dbMhs dapat digambarkan seperti dibawah ini: Data Nim Nama Sertifikat Jurusan 1 2 3 4

RecordID

Kampuz

RecStore dbMhs

Nim Nama Sertifikat Jurusan Kampuz CtrlMahasiswa.java bukaRS() tutupRS() writeRecord() dll

CtrlMahasiswa

EntryMhs

EditMhs

DeleteMhs

SearchMhs

EntryMahasiswa.java EditMahasiswa.java DeleteMahasiswa.java SearchMahasiswa.java GambarCover.java // untuk menampilkan Gambar pada Cover MIDlet About.java // menampilkan About dari Programmer dari class Canvas.

Gambar 32. Control Mahasiswa Keterangan : Record Store dbMhs Berisi 5 Field yaitu Nim, Nama, Sertifikat, Jurusan, Kampuz CtrlMahasiswa Class CtrlMahasiswa digunakan sebagai class control penjembatan antara aplikasi MIDlet kita dengan dbMhs yang menyediakan segala fungsi / method untuk memanipulasi data mahasiswa pada dbMhs, buka koneksi ke RecStore [bukaRS()], dan tutup koneksi [tutupRS()]. Method method yg ada pada class CtrlMahasiswa : - bukaRS() - tutupRS() - writeRecord(String nim, String nama, String sertifikat, String jurusan, String kampus) - dataNim() - dataRS(int i) - updateRecord(int noRec,String nim, String nama, String sertifikat, String jurusan, String kampus) - deleteRecord(int noRec) - jmlRecord() - deActiveRecord(int noRec) EntryMahasiswa Class EntryMahasiswa adalah turunan MIDlet yang menampilkan Form Entry Data Mahasiswa UBL yang menggunakan Method writeRecord( ) dari class CtrlMahasiswa untuk meng-add record baru pada RecordStore dbMhs. EditMahasiswa Class EditMahasiswa adalah turunan MIDlet yang menampilkan Form Edit Data Mahasiswa UBL yang menggunakan Method updateRecord( ) dari class CtrlMahasiswa untuk meng-edit record yang ada pada RecordStore dbMhs. DeleteMahasiswa Class DeleteMahasiswa adalah turunan MIDlet yang menampilkan Form Delete Data Mahasiswa UBL yang bisa menggunakan Method deActiveRecord( ) ataupun deleteRecord() dari class CtrlMahasiswa untuk menonaktifkan ataupun menghapus record yang ada pada RecordStore dbMhs. SearchMahasiswa

Class SearchMahasiswa adalah turunan MIDlet yang menampilkan Form Search Data Mahasiswa UBL yang menggunakan Method dataNim() dan juga dataRS(int i) dari class CtrlMahasiswa. Langkah-langkah Pembuatan Program MIDlet Mahasiswa UBL : Buat Project baru dengan nama Mahasiswa Dan nama Midlet Class-nya EntryMahasiswa Maka akan secara otomatis terbentuk Folder Mahasiswa pada C:\WTK20\apps\Mahasiswa\ \bin : berisi file .jad & .jar \lib : u/ menambahkan Library \res : u/ menambah Resource Seperti gambar/Sound \src : berisi source code .java

Gambar 33. Membuat Project Mahasiswa Lalu klik Settings pada Toolbar, sehingga muncul gambar seperti di bawah ini :

Gambar 34. Toolbar Setting J2ME Lalu Pilih Tab MIDlet, dan tambahkan MIDlet Edit Mhs, Delete Mhs, Search Mhs sehingga terbentuk gambar seperti dibawah ini :

Gambar 35. Menambahkan MIDLet

Maka apabila dijalankan mempunyai tampilan sebagai berikut :

Gambar 36. Tampilan Program Kemahasiswaan Program CtrlMahasiswa:


//CtrlMahasiswa.java import javax.microedition.rms.*;//package yg menyediakan class u/ manajemen RMS import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import java.io.*; public class CtrlMahasiswa { //Declare Objek recStore dari class RecordStore private RecordStore recStore = null; //dbMhs akan menjadi nama RecordStore qta.(Boleh diganti kok!) static final String REC_STORE = "dbMhs"; public CtrlMahasiswa() {} public void bukaRS() {System.out.println("Opening....!Record Store.."); try { /**OpenRecordStore( ) memiliki 2 kegunaan : *1. Untuk membuat Record Store baru atau *2. Untuk membuka Koneksi ke suatu Record Store *Nilai true pd parameter ke -2, maksudnya dbMhs akan secara *otomatis terbuat jikalau memang belum ada.*/ recStore = RecordStore.openRecordStore(REC_STORE, true ); } catch (Exception e) { System.err.println(e.toString()); } } public void tutupRS() { try { //Close Record Store dbMhs recStore.closeRecordStore(); } catch (Exception e) { System.err.println(e.toString()); } } public void writeRecord(String nim, String nama, String sertifikat, String jurusan, String kampus{ try{ System.out.println("Writing Record....!"); //Buat Objek strmBytes dr class ByteArrayOutputStream //yg akan digunakan u/ nge-write data ke byte array. ByteArrayOutputStream strmBytes = new ByteArrayOutputStream(); //Buat Objek strmDataType dari class DataOutputStream //yg digunakan u/ nge-write tipe data dari data diatas. DataOutputStream strmDataType = new DataOutputStream(strmBytes);

//Membuat Objek record yang bertipe data Array bytes //yg nantinya akan dimasukkan ke dlm record store. byte[] record; //nge-write tipe data berupa String dengan datanya. strmDataType.writeUTF(nim); strmDataType.writeUTF(nama); strmDataType.writeUTF(sertifikat); strmDataType.writeUTF(jurusan); strmDataType.writeUTF(kampus); //meng-clear atau nge-flush stream strmDataType.flush(); //Transfer data atau nge-write data ke byte array record record = strmBytes.toByteArray(); //write record ke Record Store dengan parameter //addRecord(byte[] record,int offset,int numBytes) recStore.addRecord(record, 0, record.length); //Cetak jumlah Record atau baris terkini System.out.println("Jml Rec:"+recStore.getNumRecords()); //Nge-reset byte array shg dimulai dari awal lagi strmBytes.reset(); //Close stream strmBytes.close(); strmDataType.close(); } catch (Exception e) {System.out.println("Ada Eksepsi....1"+e);} } //Method u/ menampilkan seluruh data namun hanya NIM-nya saja public String[] dataNim(){ String nim[]=null; try{ //recData digunakan u/ menampung data masing2 record byte[] recData = new byte[50]; //strmBytes digunakan u/ //nge-read data dari record store dbMhs ByteArrayInputStream strmBytes; //strmDataType digunakan u/ nge-read tipe data dari //data DataInputStream strmDataType ; //Panjang array nim akan sama dgn jumlah Record qta nim = new String[recStore.getNumRecords()]; for (int i = 1; i <= recStore.getNumRecords(); i++){ strmBytes= new ByteArrayInputStream( recStore.getRecord(i)); strmDataType=new DataInputStream(strmBytes); //nge-read data NIM dari dbMhs nim[i-1] = strmDataType.readUTF()+"/"+i; } strmBytes.reset();

}catch (Exception e){ System.out.println("Ada Eksepsi....2"+e); } return nim; } //Method u/ menampilkan nim,nama,sertifikat,jurusan,campuz //dari record id yang diinginkan public String[] dataRS(int i){ String data[]=new String[5]; try{ byte[] recData = new byte[50]; ByteArrayInputStream strmBytes; DataInputStream strmDataType ; strmBytes= new ByteArrayInputStream(recStore.getRecord(i));

strmDataType=new DataInputStream(strmBytes); data[0] = strmDataType.readUTF(); data[1] = strmDataType.readUTF(); data[2] = strmDataType.readUTF(); data[3] = strmDataType.readUTF(); data[4] = strmDataType.readUTF(); strmBytes.reset(); strmBytes.close(); strmDataType.close(); } catch (Exception e) { System.out.println("Ada Eksepsi....3"+e);} return data; } //Method untuk meng-update record hasil editan public void updateRecord(int noRec,String nim, String nama, String sertifikat, String jurusan, String kampus){ try{ System.out.println("Updating Record....!"); ByteArrayOutputStream strmBytes = new ByteArrayOutputStream(); DataOutputStream strmDataType = new DataOutputStream(strmBytes); byte[] record; strmDataType.writeUTF(nim); strmDataType.writeUTF(nama); strmDataType.writeUTF(sertifikat); strmDataType.writeUTF(jurusan); strmDataType.writeUTF(kampus); strmDataType.flush(); record = strmBytes.toByteArray(); //Update record dgn data terbaru recStore.setRecord(noRec,record, 0, record.length); System.out.println("Jml Rec:" + recStore.getNumRecords()); strmBytes.reset(); strmBytes.close(); strmDataType.close();

} catch (Exception e) {System.out.println("Ada Eksepsi....5"+e);}

} //Method untuk men-delete record yg diinginkan public void deleteRecord(int noRec){ int jml=0; try{ //deleteRecord(int recordId) recStore.deleteRecord(noRec); jml=jmlRecord(); }catch(Exception e) {System.out.println("Ada Eksepsi....6"+e);} System.out.println( "Jumlah Record Setelah Rec #"+noRec+" Dihapus = "+jml); } //Method u/ menghitung jumlah record terkini pd dbMhs public int jmlRecord() throws Exception{ return recStore.getNumRecords(); } //Method u/ menonaktifkan suatu record public void deActiveRecord(int noRec){

try{

System.out.println("Deactiving Record #"+noRec+" ....!"); ByteArrayOutputStream strmBytes = new ByteArrayOutputStream(); DataOutputStream strmDataType = new DataOutputStream(strmBytes); byte[] record; //memberikan tanda @ sebagai tanda //non-aktif-nya suatu record strmDataType.writeUTF("@"); strmDataType.writeUTF(""); strmDataType.writeUTF(""); strmDataType.writeUTF(""); strmDataType.writeUTF(""); strmDataType.flush(); record = strmBytes.toByteArray(); recStore.setRecord(noRec,record, 0, record.length); System.out.println("Jml Rec:" + recStore.getNumRecords()); strmBytes.reset(); strmBytes.close(); strmDataType.close();

} catch (Exception e) {System.out.println("Ada Eksepsi....5"+e);} } }

Program Entry mahasiswa:

Gambar 37. Entry Mahasiswa


//EntryMahasiswa.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class EntryMahasiswa extends MIDlet implements CommandListener{ private Display display; private Alert alert; public Form f; private TextField txtNim,txtNama; private ChoiceGroup cgSertifikat,cgJurusan,cgKampus; private Command exitCmd,subCmd,cmdOk; private StringItem itemNim,itemNama,itemSertifikat,itemJurusan,itemKampus; private String strNim,strNama,sertifikat,strJur,strKampus; GambarCover cover; public EntryMahasiswa(){ } public void startApp(){ display = Display.getDisplay(this); cmdOk = new Command("Start",Command.OK,1); cover = new GambarCover("/cover.png"); cover.addCommand(cmdOk); cover.setCommandListener(this); display.setCurrent(cover); } public void pauseApp(){ } public void destroyApp(boolean kondisi){ notifyDestroyed(); } public void entryData(){ alert = new Alert("Universitas Budi Luhur"); alert.setString("J2ME Programming\nDatabase With\nRMS"); alert.setTimeout(2000); txtNim = new TextField("NIM : ","",10,TextField.NUMERIC); txtNama = new TextField("Nama : ","",20,TextField.ANY); cgSertifikat = new ChoiceGroup("Sertifikat",Choice.MULTIPLE); cgSertifikat.append("SD",null); cgSertifikat.append("SMP",null); cgSertifikat.append("SMA",null); cgJurusan = new ChoiceGroup("Jurusan:", Choice.EXCLUSIVE); cgJurusan.append("TI",null); cgJurusan.append("MI",null); cgJurusan.append("KA",null); cgJurusan.append("TK",null); cgKampus= new ChoiceGroup("Kampus : ",Choice.EXCLUSIVE); cgKampus.append("Cempaka mas",null); cgKampus.append("Ciledug",null); cgKampus.append("Roxy",null); cgKampus.append("Salemba",null); f = new Form("Entry Mahasiswa"); f.append(txtNim); f.append(txtNama); f.append(cgSertifikat); f.append(cgJurusan); f.append(cgKampus); exitCmd = new Command("Exit!",Command.EXIT,1); subCmd = new Command("Submit",Command.OK,2); f.addCommand(exitCmd); f.addCommand(subCmd); f.setCommandListener(this); display.setCurrent(alert,f);

} public void keluar(){ this.destroyApp(true);

} public void awal(){ entryData(); } public void tampil(){ System.out.println("Ctrl!"); strNim = txtNim.getString(); strNama = txtNama.getString(); sertifikat=""; if(cgSertifikat.isSelected(0)) sertifikat=sertifikat+" "+cgSertifikat.getString(0); if(cgSertifikat.isSelected(1)) sertifikat=sertifikat+", "+cgSertifikat.getString(1); if(cgSertifikat.isSelected(2)) sertifikat=sertifikat+", "+cgSertifikat.getString(2); strJur= cgJurusan.getString(cgJurusan.getSelectedIndex()); strKampus= cgKampus.getString(cgKampus.getSelectedIndex()); itemNim= new StringItem("","NIM :"+strNim+"\n"); itemNama= new StringItem("","Nama : "+strNama+"\n"); itemSertifikat = new StringItem("","Sertifikat : "+sertifikat+"\n"); itemJurusan= new StringItem("","Jurusan : "+strJur+"\n"); itemKampus= new StringItem("","Kampus : "+strKampus+"\n"); Form fz = new Form("Tampilan Data"); fz.append(itemNim); fz.append(itemNama); fz.append(itemSertifikat); fz.append(itemJurusan); fz.append(itemKampus); Command awalCmd=new Command("Back",Command.OK,3); fz.addCommand(awalCmd); fz.setCommandListener(this); display.setCurrent(fz); } public void commandAction(Command c, Displayable d){ String lbl = c.getLabel(); if(lbl.equals("Start")){entryData();} if(lbl.equals("Exit!")){keluar(); } else if(lbl.equals("Submit")){ tampil(); CtrlMahasiswa cMhs = new CtrlMahasiswa(); cMhs.bukaRS(); System.out.println(strNim + strNama + sertifikat + strJur + strKampus); cMhs.writeRecord(strNim, strNama, sertifikat, strJur, strKampus); } else if(lbl.equals("Back")){awal(); } } }

Program Edit

Kemahasiswaan :

Gambar 38. Pilihan Edit Kemahasiswaan

//EditMahasiswa.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class EditMahasiswa extends MIDlet implements CommandListener{ private Display display; private ChoiceGroup cgEdit; private Form a,f; private Command cmdOk,cmdEdit,cmdBack,cmdBack2,cmdExit,cmdDetil,cmdUpdate; GambarCover cover; CtrlMahasiswa c = new CtrlMahasiswa(); private TextField txtNim,txtNama; private ChoiceGroup cgSertifikat,cgJurusan,cgKampus; private StringItem itemNim,itemNama,itemSertifikat,itemJurusan,itemKampus; private String strNim,strNama,sertifikat,strJur,strKampus; public EditMahasiswa(){ } public void startApp(){ display = Display.getDisplay(this); cmdOk = new Command("Start",Command.OK,1); cover = new GambarCover("/cover.png"); cover.addCommand(cmdOk); cover.setCommandListener(this); display.setCurrent(cover); } public void pauseApp(){ } public void destroyApp(boolean unconditional){

notifyDestroyed(); } public void commandAction(Command c, Displayable d){ if(c==cmdOk){tampilData();} if(c==cmdDetil){lihatDetil();} if(c==cmdBack){tampilData();} if(c==cmdBack2){tampilData();} if(c==cmdEdit){ editData();} if(c==cmdExit){destroyApp(true);} if(c==cmdUpdate){updateData();} } public void tampilData(){ a = new Form("Data Mahasiswa UBL"); cgEdit = new ChoiceGroup("Data Record Store:",Choice.EXCLUSIVE); cmdExit = new Command("Exit",Command.EXIT,1); cmdDetil = new Command("Open",Command.OK,2); c.bukaRS(); String[] nim = c.dataNim(); for(int i=0;i<nim.length;i++){ if(nim[i].startsWith("@")){ nim[i]="Has been deleted!"; } cgEdit.append(nim[i],null); } c.tutupRS(); a.addCommand(cmdExit); a.addCommand(cmdDetil); a.append(cgEdit); a.setCommandListener(this); display.setCurrent(a); } public void lihatDetil(){ Form b = new Form("Edit Data Mahasiswa"); cmdBack = new Command("Back",Command.BACK,1); cmdEdit = new Command("Edit",Command.OK,2); int x = cgEdit.getSelectedIndex()+1; System.out.println("Record #"+x); c.bukaRS(); String[] data=c.dataRS(x); if(data[0].equals("@")){ Alert al = new Alert("Warning!"); al.setString("Data isn't exist anymore!"); al.setTimeout(1000); display.setCurrent(al); } else{ b.append("NIM : "+data[0]+"\n"); b.append("Nama : "+data[1]+"\n"); b.append("Sertifikat : "+data[2]+"\n"); b.append("Jurusan : "+data[3]+"\n"); b.append("Kampuz : "+data[4]+"\n"); c.tutupRS(); b.addCommand(cmdBack); b.addCommand(cmdEdit); b.setCommandListener(this); display.setCurrent(b); } } public void editData(){ int x = cgEdit.getSelectedIndex()+1; c.bukaRS(); String[] data=c.dataRS(x); txtNim = new TextField("NIM : ",data[0],10,TextField.NUMERIC); txtNama = new TextField("Nama : ",data[1],10,TextField.ANY); cgSertifikat = new ChoiceGroup("Sertifikat",Choice.MULTIPLE); cgSertifikat.append("SD",null); cgSertifikat.append("SMP",null); cgSertifikat.append("SMA",null);

} public void updateData(){ int x = cgEdit.getSelectedIndex()+1; strNim = txtNim.getString(); strNama = txtNama.getString(); sertifikat=""; if(cgSertifikat.isSelected(0)) sertifikat=sertifikat+" "+cgSertifikat.getString(0); if(cgSertifikat.isSelected(1)) sertifikat=sertifikat+", "+cgSertifikat.getString(1); if(cgSertifikat.isSelected(2)) sertifikat=sertifikat+", "+cgSertifikat.getString(2); strJur = cgJurusan.getString(cgJurusan.getSelectedIndex()); strKampus = cgKampus.getString(cgKampus.getSelectedIndex()); c.bukaRS(); System.out.println(strNim+strNama+sertifikat+strJur+strKampus); c.updateRecord(x,strNim,strNama,sertifikat,strJur,strKampus);

cgJurusan = new ChoiceGroup("Jurusan :",Choice.EXCLUSIVE); cgJurusan.append("TI",null); cgJurusan.append("MI",null); cgJurusan.append("KA",null); cgJurusan.append("TK",null); cgKampus = new ChoiceGroup("Kampus : ",Choice.EXCLUSIVE); cgKampus.append("Cempaka mas",null); cgKampus.append("Ciledug",null); cgKampus.append("Roxy",null); cgKampus.append("Salemba",null); display = Display.getDisplay(this); f = new Form("Entry Mahasiswa"); f.append(txtNim); f.append(txtNama); f.append(cgSertifikat); f.append(cgJurusan); f.append(cgKampus); cmdUpdate = new Command("Update",Command.OK,1); cmdBack2 = new Command("Back",Command.BACK,2); f.addCommand(cmdBack2); f.addCommand(cmdUpdate); f.setCommandListener(this); display.setCurrent(f);

} }

Program Mahasiswa

Menghapus/Delete

Gambar 39. Menghapus/delete mahasiswa


//DeleteMahasiswa.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class DeleteMahasiswa extends MIDlet implements CommandListener{ private Display display; private ChoiceGroup cgEdit; private Form a,f; private Command cmdOk,cmdDelete,cmdBack,cmdExit,cmdDetil; CtrlMahasiswa cM = new CtrlMahasiswa(); GambarCover cover; public DeleteMahasiswa(){ } public void startApp(){ display = Display.getDisplay(this); cmdOk = new Command("Start",Command.OK,1); cover = new GambarCover("/cover.png"); cover.addCommand(cmdOk); cover.setCommandListener(this); display.setCurrent(cover); } public void pauseApp(){ } public void destroyApp(boolean unconditional){ notifyDestroyed(); } public void commandAction(Command c, Displayable d){ if(c==cmdOk){tampilData();} if(c==cmdDetil){lihatDetil();} if(c==cmdBack){tampilData();} if(c==cmdExit){destroyApp(true);} if(c==cmdDelete){ int x = cgEdit.getSelectedIndex()+1; cM.bukaRS(); cM.deActiveRecord(x); System.out.println("Data Record #"+x+" Berhasil dihapus"); cM.tutupRS(); Alert a = new Alert("Delete Record!"); a.setString("Data Record #"+x+" Berhasil dihapus"); display.setCurrent(a); } } public void tampilData(){ a = new Form("Data Mahasiswa UBL"); cgEdit = new ChoiceGroup("Data Record Store:",Choice.EXCLUSIVE);

cmdExit = new Command("Exit",Command.EXIT,1); cmdDetil = new Command("Open",Command.OK,2); cM.bukaRS(); String[] nim = cM.dataNim(); for(int i=0;i<nim.length;i++){ if(nim[i].startsWith("@")){ nim[i]="Has been deleted!"; } cgEdit.append(nim[i],null); } cM.tutupRS(); a.addCommand(cmdExit); a.addCommand(cmdDetil); a.append(cgEdit); a.setCommandListener(this); display.setCurrent(a);

} public void lihatDetil(){ Form b = new Form("Delete Data Mahasiswa"); cmdBack = new Command("Back",Command.BACK,1); cmdDelete = new Command("Delete",Command.OK,2); int x = cgEdit.getSelectedIndex()+1; System.out.println("Record #"+x); cM.bukaRS(); String[] data=cM.dataRS(x); if(data[0].equals("@")){ Alert al = new Alert("Warning!"); al.setString("Data isn't exist anymore!"); al.setTimeout(1000); display.setCurrent(al); } else{ b.append("NIM : "+data[0]+"\n"); b.append("Nama : "+data[1]+"\n"); b.append("Sertifikat : "+data[2]+"\n"); b.append("Jurusan : "+data[3]+"\n"); b.append("Kampuz : "+data[4]+"\n"); cM.tutupRS(); b.addCommand(cmdBack); b.addCommand(cmdDelete); b.setCommandListener(this); display.setCurrent(b); } } }

Program Cari

Mahasiswa

Gambar 40. Mencari Mahasiswa Berdasarkan NIM


import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class SearchMahasiswa extends MIDlet implements CommandListener{ private Display display; private Command cmdOk,cmdCari,cmdExit,cmdBack,cmdBack2,cmdOpen,cmdAbout; private TextField txtNim; private List dtNim; private Form fc,f2; private String nim; private String [] nimList=null; CtrlMahasiswa cM = new CtrlMahasiswa(); GambarCover cover; About about; public SearchMahasiswa(){ } public void startApp(){ display = Display.getDisplay(this); cmdOk = new Command("Start",Command.OK,1); cover = new GambarCover("/cover.png"); cover.addCommand(cmdOk); cover.setCommandListener(this); display.setCurrent(cover); } public void pauseApp(){ } public void destroyApp(boolean unconditional){ notifyDestroyed(); } public void commandAction(Command c, Displayable d){ if(c==cmdOk){formCari();} if(c==cmdCari){viewNim();} if(c==cmdBack){formCari();} if(c==cmdOpen){viewData();} if(c==cmdBack2){viewNim();} if(c==cmdExit){destroyApp(true);} if(c==cmdAbout){aboutMe();} } public void formCari(){ fc = new Form("Searching Mahasiswa"); txtNim = new TextField("Masukan NIM :","",10,TextField.NUMERIC); cmdCari = new Command("Cari",Command.OK,1); cmdExit = new Command("Exit",Command.EXIT,2); cmdAbout= new Command("About Me",Command.OK,3); fc.append("Midlet Search Mahasiswa\nUniversitas Budi Luhur\nPetukangan Utara, Jakarta Selatan, Indonesia"+

"\nBy : Gerry Geraldy\nBlueJC [BudiLuhurJavaCommunity]\nJ2ME Programming"); fc.append(txtNim); fc.addCommand(cmdExit); fc.addCommand(cmdCari); fc.addCommand(cmdAbout); fc.setCommandListener(this); display.setCurrent(fc); } public void getNim(){ this.nim = txtNim.getString(); } public void getNimList(){ cM.bukaRS(); this.nimList = cM.dataNim(); cM.tutupRS(); } public void viewNim(){ Image icon=null; try { icon = Image.createImage("/Icon.png"); } catch (Exception err) { }

getNim(); getNimList(); dtNim = new List("Hasil Search :",Choice.IMPLICIT); cmdBack = new Command("Back",Command.BACK,1); cmdOpen = new Command("View",Command.OK,2); for(int i=0;i<nimList.length;i++){ if(nimList[i].startsWith(nim)){ dtNim.append(nimList[i],icon); } } dtNim.addCommand(cmdBack); dtNim.addCommand(cmdOpen); dtNim.setCommandListener(this); display.setCurrent(dtNim);

} public void viewData(){ f2 = new Form("Data Mahasiswa UBL"); cmdBack2 = new Command("Back",Command.BACK,1); String mhs = dtNim.getString(dtNim.getSelectedIndex()); String noRec = mhs.substring(11); System.out.println(noRec); int x = Integer.parseInt(noRec); System.out.println("Record #"+x); cM.bukaRS(); String[] data=cM.dataRS(x); System.out.println(data[0]); if(data[0].equals("@")){ Alert al = new Alert("Warning!"); al.setString("Data isn't exist anymore!"); al.setTimeout(1000); display.setCurrent(al); } else{ f2.append("NIM : "+data[0]+"\n"); f2.append("Nama : "+data[1]+"\n"); f2.append("Sertifikat : "+data[2]+"\n");

} public void aboutMe(){ about = new About(); about.addCommand(cmdExit); about.setCommandListener(this); display.setCurrent(about); } }

} cM.tutupRS();

f2.append("Jurusan : "+data[3]+"\n"); f2.append("Kampuz : "+data[4]+"\n"); f2.addCommand(cmdBack2); f2.setCommandListener(this); display.setCurrent(f2);

Program Cover

Gambar 41. Gambar Cover


import javax.microedition.lcdui.*; class GambarCover extends Canvas{ private static int tinggiframe,lebarframe; private static Image coverImages=null; GambarCover(String nmGbr){ if(coverImages==null){ try{ coverImages=Image.createImage(nmGbr); tinggiframe=coverImages.getHeight(); lebarframe=coverImages.getWidth(); } catch(Exception ioe){ return; } } } public void paint(Graphics g) { g.setColor(0x000000); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(0xFFFFFF); g.fillRect(10,12,160,2); g.fillRect(10,148,160,2); g.drawImage(coverImages,(getWidth()-lebarframe)/2,(getHeight()tinggiframe)/2,Graphics.TOP+Graphics.LEFT); } }

BAB IV

JAVA 2 ENTERPRISE EDITION (J2EE)


Sun Mycrosystem mengenalkan banyak sekali versi pemrograman java. Salah satunya adalah Java Versi 2 Enterprise Editon atau J2EE. Banyak sekali fasilitas yang terdapat pada J2EE ini. Tetapi tidak dibahas semua dibuku ini. Sebagian besar adalah konsep pemrograman dan beberapa contoh penggunaan J2EE yang diambil dari dokumentasi www.sun.com. Kelebihan J2EE selain bebas dalam penggunaannya, paket J2EE ini telah dilengkapi semua kebutuhan pengembang pada sisi pengguna maupun sisi server. Kompnenen-komponen pada J2EE adalah EJB (Enterprise Java Bean), Web Container, Aplikasi Pengguna (Aplication Client) dan Applet. Perbedaan terpenting antara J2EE dengan JSDK adalah J2EE merupakan versi enterprise yang memiliki komponen JSDK serta mendukung komponen web dan Java Bean. Sedangkan aplikasi standar aplikasi client dan applet sudah dapat digunakan pada JSDK.

Gambar 32. J2EE Java 2 Enterprise Edition. Tools yang digunakan untuk membuat system pada J2EE J2EE adalah model web console atau yang disebut dengan Aplication Server Admin Console pada port 4848, Deploy Tools dan terminal. APLIKASI SERVER Cara mengkatifkan server J2EE, bukalah terminal window atau command dos kemudian ketiklah :
asadmin start-domain --verbose domain1

atau jika menggunakan system operasi windows yaitu Programs Sun Microsystem J2EE SDK Start Default Server. Kemudian bukalah salah satu web browser, contoh : Ms. Internet Explorer, kemudian isilah address dengan alamat : http://localhost:4848. Masukkan user admin dan kata kuncinnya (password).

Gambar 33. Application Server Admin Console. Untuk perintah untuk me-non aktifkan server
asadmin stop-domain domain1

atau jika menggunakan system operasi windows Programs Sun MicroSystem Stop Default Server DEPLOYMENT TOOL Untuk membuat paket aplikasi J2EE , Sun Microsystem menyedikan fasilitas Deployment Tool. Untuk menjalankan aplikasi Deployment Tool dengan menggunakan terminal atau command dos : deploytool atau dengan menggunakan menu Programs Sun Microsystem Deploy Tool

Gambar 34. Deployment Tool JAVA API JAVA API adalah fasilitas untuk developer java dalam membuat aplikasi. Untuk lebih jelasnya adalah sebagai berikut : EJB (Enterprise Java Bean) Enter Java Bean EJB atau sering dikenal dengan Enterperise bean adalah komponen kode-kode dari bisnis logic. Penggunaan EJB dapat digabungkan dengan komponen-komponen lainnya yang ada pada J2EE. Ada beberapa model dari EJB yaitu session beans, entity beans dan messagedriven beans. Keuntungan dari entity-beans adalah penggunaan SQL yang digunakan pada JDBC API. JAVA SERVLET TECHNOLOGY Java Servlet teknologi adalah class yang dapat digunakan untuk melakukan transaksi pada HTTP. Servlet ini merupakan model pemrograman web dan juga dapat menggunakan fasilitas yang ada pada Java Server Page. JAVA SERVER PAGES Java Server Pages merupakan pemrograman web dengan model basis teks dokumen yang dapat diekspresikan dengan beberapa tipe teks. (HTML, WML dan XML). JAVA MESSAGE SERVICE JMS API adalah standar pesan yang ada pada aplikasi J2EE untuk membuat, mengirimkan, menerima dan pembaca pesan. JAVA TRANSACTION API JTA merupakan standar interface J2EE yang menangani transaksi commit dan rollback.

JAVAMAIL API J2EE menyediakan fasilitas untuk mengirimkan email yaitu JAVAMAIL. JAVA MAIL ini telah kita bahas sebelumnya. JAVABEANS ACTIVATION FRAMEWORK. JAF digunakan oleh JAVAMAIL kare JAF merupakan standar komunikasi untuk mendefinisikan tipe dari data dan system encapsulate. JAVA API FOR XML PROCESSING JAXP dapat memproses dokumen XML dengan tipe Document Object Model (DOM), Simple API for XML (SAX), dan Extensible Stylesheet Language Transformation (XLST). Aplikasi JAXP dapat melakukan penelusuran dan merubah dokumen XML menjadi dokumen yang sesuai dengan tipe dokumen W3C. Penggunaan JAXP pada protocol HTTP dikenal dengan Java API for XML-Based RPC (JAX-RPC). JDBC API JDBC API digunakan untuk mengakses perintah SQL pada method pemrograman JAVA. Pada versi J2EE, Enterprice Bean API menggunakan JDBC API ini untuk mengkases database. JDBC API juga dapat digunakan secara langsung tanpa harus mengaktifkan Enterprise Bean. Sun Microsystem juga menyediakan aplikasi untuk mengembangkan program pada J2EE, yaitu Sun Java Studio Creator. Tetapi sayangnya untuk aplikasi ini perusahaan Sun MicroSystem tidak mendistribusikan secara gratis tetapi harus membayar. Untuk Mengembangkan program dengan menggunakan Java Studio Creator membutuhkan memori yang tidak sedikit yaitu minimal 512 dengan minimal prosesor adalah Pentium 4.

Gambar 35. Sun Java Studio Creator

TENTANG PENULIS
Penulis bernama Windu Gata, SKom terlahir di Jakarta pada tanggal 09 Juli 1976. sejak tahun 1999 penulis bekerja pada instansi pemerintah, yaitu LKBN ANTARA sebagai staf analisa dan programmer bagian pengembangan dan penelitian. Selain itu penulis merupakan salah satu dosen di universitas Budi Luhur dengan mata kuliah Unix, Bahasa Pemrograman 3 java lanjutan. Bahasa Pemrograman 4 java komunikasi dan mobile, Pengelolalan Sistem Informasi, dan Sistem Database 2 Database Lanjutan. Penulis Juga sebagai pengajar di Lembaga Pendidikan Jurnalistik Antara (LPJA) LKBN Antara, khusus dibidang informatika, dan pengajar lepas. Hobi di bidang teknik informatika (TI), khususnya dibidang pemrograman, telah digeluti sejak memasuki bangku kuliah Strata Satu (S1) dengan jurusan Teknik Informatika di Universitas Budi Luhur tahun 1995, dan menyelesaikan studinya tahun 1999. Seiring waktu berjalan dan perkembangan IT yang semakin pesat, penulis mengasah kemampuan dan memliki ketrampilan di bidang sistem operasi seperti SolarisSun Microsystem, AIX IBM RS6000, linux, dan Microsoft Windows. Begitupula dibidang pemrograman, bahasa pemrograman yang telah kuasai seperti Ms. Visual Basic, VBA MS. Access, PHP, ASP, Oracle IAS, Web programming dan java, dengan database Ms.Access, MySql, Ms. Access, Ms. SqlServer, dan Oracle. Juga tools yang digunakan seperti Seagate Crystal Report dan networking (TCP/IP, UDP, Multicasting dan DVB/IP). Pengalaman membuat program di LKBN Antara ataupun sebagai programmer lepas telah dijalani. Contoh program di tempat penulis bekerja, penulis telah membuat seperti program komunikasi RS232, TCP dan DVB/IP dengan sarana modem sampai satelit. Dan sebagai pemrogramer lepas, penulis telah membuat diberbagai instasi pemerintah dan swasta. Cita-cita untuk turut memajukan bangsa dan negara melalui kemampuan penulis, salah satunya dengan menulis buku ini. Dan berharap, dengan adanya buku ini, jika seseorang yang tidak bisa menjadi bisa dan yang sudah bisa menjadi lebih bisa. Kritik dan saran sangat dinanti dengan mengirimkannya ke email penulis, yaitu windu@antara.co.id atau retwin7678@yahoo.com. Karena penulis bukanlah orang yang sempurna, masih banyak yang harus dipelajari dan rasa ingin memperbaiki sehingga dapat menulis buku-buku lainnya. Ucapan Terima kasih, penulis ucapkan atas perhatiannya. Dan terima kasih terdalam teruntuk istri dan anak-anakku, keluarga, guru-guru, keluarga besar LKBN Antara, Keluarga Besar Universitas Budi Luhur dan Negeri ku Indonesia. -- Hiduplah Bangsa dan Negara, saya mencintaimu INDONESIA ---

Anda mungkin juga menyukai