Tampilkan postingan dengan label Java. Tampilkan semua postingan
Tampilkan postingan dengan label Java. Tampilkan semua postingan

Minggu, 09 Juni 2013

Mengeset LookAndFeel Pada Tampilan Jendela Form Java Supaya Seperti Tampilan Windows

Mengeset LookAndFeel Pada Tampilan Jendela Form Java Supaya Seperti Tampilan Windows
Mengeset LookAndFeel Pada Tampilan Jendela Form Java Supaya Seperti Tampilan Windows sebenarnya masalah klasik. Berkali-kali penulis mengalami harus mengerjakan hal ini. Karena saking seringnya, kita tulis saja, supaya tidak perlu cari-cari lagi hehe :D.

Yang perlu dicatat, tidak semua LookAndFeel terinstall di komputer, sistem operasi atau JDK tempat aplikasi akan kita jalankan. Oleh sebab itu kita membutuhkan kode program yang "safe" (aman) agar tidak error ketika berusaha merubah LookAndFeel.

Senin, 27 Mei 2013

Menampilkan Nomor Urut pada Hasil Query MySQL dalam Satu Perintah SQL

Artikel pendek untuk Menampilkan Nomor Urut pada Hasil Query MySQL dalam Satu Perintah SQL ini adalah update dari artikel sebelumnya Membuat Nomor Urut dengan MySQL, Nomor Rangking dengan Bahasa SQL.

Artikel ini penulis buat setelah mencoba membuat nomor urut pada Pemrograman Java yang menampilkan data dari Database MySQL menggunakan dua perintah SQL seperti dibahas sebelumnya yaitu :

Selasa, 07 Mei 2013

Mengkonversi Aplikasi Java JAR Menjadi Executable EXE, Jar To Exe Converter dengan Launch4J

Sudah lama penulis impikan bisa membuat Aplikasi Java tetapi dalam bentuk EXE (Executable). Karena biasanya aplikasi Java yang dihasilkan dari NetBeans berekstensi *.jar, bukan *.exe. Dan menjalankannya pun repot, harus dengan perintah DOS Prompt.

Akhirnya ketemu suatu tool converter dari *.JAR ke *.EXE yang cukup simple, gratis dan open source, yaitu Launch4J. Dapat didonwload secara gratis di website resminya berikut ini. Nah cara pemakainnya sebagai berikut :



Kamis, 02 Mei 2013

Membuat Window MDI pada Java NetBeans, Aplikasi Multiple Document Interface dengan JDesktopPane dan JInternalFrame

Setelah sekian lama penasaran bagaimana cara membuat Aplikasi Java dengan Style MDI (Multiple Document Interface) Menggunakan NetBeans akhirnya terjawab sudah. Yaitu menggunakan komponen JDesktopPane dan JInternalFrame.

Caranya buat project Java Application di NetBeans. Kemudian Buat Form Baru, klik kanan Project Add New JFrameForm :


Kamis, 25 April 2013

Membuat Java Window Center Screen dan Maximize Form Window pada NetBeans

Sebenarnya ini masalah sepele, hanya bagaimana Menampilkan Form Window di Java agar keluar di Center Screen. Kemudian masalah kedua bagaimana agar Window bisa tampil dalam keadaan Maximize.

Ternyata solusinya simple, untuk Menampilkan Window Center Screen, pada NetBeans tambahkan kode program berikut ini di bawah initComponents(); :

public class FormMain extends javax.swing.JFrame {

    /**
     * Creates new form FormMain
     */
    public FormMain() {
        try {

        initComponents();
       

Minggu, 24 Maret 2013

DateTimePicker pada Java NetBeans Menggunakan JCalendar dan JDateChooser

Pemrograman Java biasa Penulis sebut Bahasa Pemrograman Langit, ato lebih tepatnya Pemrograman Para Dewa hehe :) Karena susah banget, lambat, tapi menurut para Professor di Jurusan IT disebut bahasa Ideal karena memiliki struktur bahasa yang sangat rapi dan sempurna serta bisa berjalan di semua OS.

Nah, kelemahannya yaitu bagi kita para manusia biasa ini :) karena keterbatasan pengetahuan kita tidak mampu mengimplementasikan bahkan komponen yang paling sederhana sekalipun. Kali ini penulis ingin mengambil contoh DateTimePicker (DatePicker) yang berguna untuk memilih Tanggal. Di bahasa pemrograman lain seperti VB, .NET, Web PHP sangat mudah diimplementasikan, tetapi di Java tidak ada, bahkan di NetBeans juga tidak ada komponen tersebut.

Untunglah penulis mendapatkan komponen JCalendar yang dapat ditemukan disini. Ternyata komponen ini sangat praktis untuk memilih Tanggal. Cara pemakaiannya sebagai berikut :

1. Buat Project baru di Netbeans, kemudian pada Palette, klik kanan pilih Palette Manager

Kamis, 30 Agustus 2012

Membangun Web JSP dengan Dreamweaver Wizard (Pemrograman Web JSP)

Setalab Berhasil Membuat Web PHP dengan Dreamweaver Wizard, ternyata Dreamweaver juga Mampu Digunakan Untuk Membuat Web JSP Secara Kilat dengan Dreamweaver JSP Wizard. Langkah-langkahnya sebagai berikut :

Jalankan Dreamweaver, kalau bisa dengan klik Kanan Run As Administrator. Karena jika kita menggunakan Apache Tomcat, biasanya lokasinya di Drive C:\ Sedangkan untuk menulis file di Drive C:\Program Files membutuhkan Permission Administrator.


Buat dahulu New Site, dengan klik Menu Site- New Site

Minggu, 26 Agustus 2012

Memampilkan JasperReport iReport PDF pada Web JSP Servlet (Pemrograman Java Server Page)

Setelah bisa Membuat Report JasperReport dengan iReport sehingga siap pakai. Kemudian sudah coba kita Menampilkan JasperReport iReport di Java Desktop dengan NetBeans. Maka kali ini coba kita gunakan Report tersebut untuk ditampilkan pada Aplikasi Java Berbasis Web atau JSP (Java Server Page) yang juga dibuat menggunakan NetBeans.

Pertama kita buat Project Baru dengan cara Klik File-New Project


Kemudian Pilih Java Web - Web Application. Klik Next

Rabu, 22 Agustus 2012

Menampilkan JasperReport iReport pada Java NetBeans (Pemrograman Java Desktop)

Setelah bisa Membuat Report JasperReport dengan iReport sehingga siap pakai. Maka kali ini coba kita gunakan Report tersebut untuk ditampilkan pada Aplikasi Java Desktop yang dibuat menggunakan NetBeans.

Pertama kita buat Project Baru dengan cara Klik File-New Project



Kemudian Pilih Java - Java Application, klik Next

Jumat, 17 Agustus 2012

Report Java dengan JasperReport iReport

Untuk membuat Report pada Bahasa Pemrograman Java yang paling Populer adalah dengan JasperReport iReport. Software untuk membuat Report tersebut dapat anda download secara gratis di sini.

Setelah terinstall kita buat Report langkah demi langkah :

1. Buka iReport, kemudian klik Data Source Connection :


2. Setelah tampil Dialog Connection / Dataseurces, kemudian klik New :

Selasa, 03 Juli 2012

Membuat Kalkulator DOS dengan Input java.util.Scanner (Pemrograman Java)

Aplikasi ini adalah aplikasi kalkulator sederhana dengan pemrograman Java yang hasilnya berjalan pada platform DOS (command prompt). Yang menarik dari aplikasi ini adalah penggunaan java.util.Scanner yang bisa digunakan untuk mengambil input parameter dari argumen yang diketikkan pada command DOS saat dilakukan pemanggilan program. java.util.Scanner ini jarang diajarkan di buku-buku (tutorial)

public class calculator {

Rabu, 23 Mei 2012

Web Reader Java ME NetBeans


Web Reader J2ME
Untuk membuat aplikasi Web Reader di Java ME NetBeans dapat digunakan library import javax.microedition.io.*. Langkah-langkah pembuatannya sebagai berikut :

1. Buka Netbeans. Klik menu File-New Project. Pilih Categories : Java ME, Projects : Mobile Application. Klik Next. Pada dialog berikutnya, isikan Project Name : MobileWebReader. Kemudian cek Set As Main Project dan hilangkan cek pada Create Hello Midlet. Klik Next. Klik Next. Klik Finish.


2. Pada Project TreeView klik kanan, pilih New – Visual Midlet. Kemudian akan muncul dialog, isikan Class Name : MWeb, package : my.appwebreader. Klik Finish. Akan ditampilkan MIDlet kosong pada Design. Dari Palette Displayables tambahkan Form, kemudian ubah namanya menjadi FMain. Kemudian pada Form FMain tambahkan itemCommand dan exitCommand dari Pallete Commands. Ubah name dari itemCommand menjadi cmWeather dan label-nya menjadi “Cuaca”. Setelah itu tarik garis dari MIDlet Started menuju FMain, kemudian dari FMain exitCommand tarik garis ke MIDlet Resumed..



3. Pada Screen Design akan ditampilkan Design dari FMain. Ubah title dari FMain menjadi “Web Reader”, kemudian tambahkan 1 buah TextField. Ubah name-nya menjadi tResult. Kemudian ubah property label dari TextField tersebut menjadi “Result”. Kemudian property text-nya kosongkan, menjadi “”. Sehingga tampak seperti pada tampilan berikut ini :



4. Pada cmWeather, klik kanan pilih Go to Source. Pada Source akan muncul kode program dari method public void commandAction(), di dalamnya pada blok if (command == cmWeather) { } tambahkan kode program berikut :

    public void commandAction(Command command, Displayable displayable) {                                              
        // write pre-action user code here
        if (displayable == FMain) {                                          
            if (command == cmWeather) {                                        
                // write pre-action user code here
                try {
                    new Thread(new Runnable()
                    {
                        public void run()
                        {
                            try {
                                tResult.setString("");
                                StreamConnection sCon = (StreamConnection)Connector.open("http://localhost/cuaca.htm");
                                InputStream is = sCon.openInputStream();
                                StringBuffer b = new StringBuffer();
                                int ch;
                                while ((ch = is.read()) != -1) {
                                    b.append((char) ch);
                                }
                                int cutidx = b.toString().indexOf("Yogyakarta");
                                cutidx = b.toString().indexOf("<small>", cutidx);
                                int lstidx = b.toString().indexOf("</small>", cutidx);
                                String result = "Cuaca Yogyakarta " + b.toString().substring((cutidx + 7), (lstidx));
                                tResult.setString(result);
                            } catch (Exception e) {
                            }
                        }
                    }).start();
                } catch (Exception e) {
                }
                                         
                // write post-action user code here
            } else if (command == exitCommand) {                                        
                // write pre-action user code here
                exitMIDlet();                                          
                // write post-action user code here
            }                                                
        }                                              
        // write post-action user code here
    }

5. Klik Run untuk menjalankan aplikasi. Kemudian klik menu Cuaca, maka akan ditampilkan Prakiraan Cuaca dari Web (misalnya web BMG) untuk suatu kota (misalnya kota Yogyakarta). Hasilnya akan tampak seperti di bawah ini :




Selasa, 22 Mei 2012

Membuat RSS Reader dengan J2ME NetBeans


RSS Reader dengan J2ME
Untuk membuat aplikasi RSS Reader di Java ME NetBeans dapat digunakan library KXML. Langkah-langkah pembuatannya sebagai berikut :

1. Buka Netbeans. Klik menu File-New Project. Pilih Categories : Java ME, Projects : Mobile Application. Klik Next. Pada dialog berikutnya, isikan Project Name : MobileRSSReader. Kemudian cek Set As Main Project dan hilangkan cek pada Create Hello Midlet. Klik Next. Klik Next. Klik Finish.


2. Pada Project TreeView klik kanan, pilih New – Visual Midlet. Kemudian akan muncul dialog, isikan Class Name : MNews, package : my.apprsseader. Klik Finish. Akan ditampilkan MIDlet kosong pada Design. Dari Palette Displayables tambahkan Form, kemudian ubah namanya menjadi FMain. Kemudian pada Form FMain tambahkan itemCommand dan exitCommand dari Pallete Commands. Ubah name dari itemCommand menjadi cmGet dan label-nya menjadi “Get”. Setelah itu tarik garis dari MIDlet Started menuju FMain, kemudian dari FMain exitCommand tarik garis ke MIDlet Resumed..


3. Pada Screen Design akan ditampilkan Design dari FMain. Ubah title dari FMain menjadi “New Reader”, kemudian tambahkan 1 buah TextField. Ubah name-nya menjadi tList. Kemudian ubah property label dari TextField tersebut menjadi “News List”. Kemudian property text-nya kosongkan, menjadi “”. Sehingga tampak seperti pada tampilan berikut ini :


4. Pada cmGet, klik kanan pilih Go to Source. Pada Source akan muncul kode program dari method public void commandAction(), di dalamnya pada blok if (command == cmGet) { } tambahkan kode program berikut :

    public void commandAction(Command command, Displayable displayable) {
        // write pre-action user code here
        if (displayable == FMain) {
            if (command == cmGet) {
                // write pre-action user code here
                try {
                    new Thread(new Runnable()
                    {
                        public void run()
                        {
                            try {
                                HttpConnection conn;
                                DataInputStream dis;
                                DataOutputStream dos;

                                conn = (HttpConnection) Connector.open("http://www.nytimes.com/services/xml/rss/nyt/National.xml");
                                conn.setRequestMethod(HttpConnection.GET);
                                conn.setRequestProperty("Content-Type", "text/xml");
                                dos = new DataOutputStream(conn.openDataOutputStream());

                                dis = new DataInputStream(conn.openDataInputStream());
                                if (conn.getResponseCode() == HttpConnection.HTTP_OK) {
                                    doParse(dis);
                                    String newsList = "";
                                    for (int i = 0; i < jumlah; i++) {
                                        newsList = newsList + sTitle + "\n";
                                        newsList = newsList + sLink + "\n";
                                        newsList = newsList + sDescription + "\n";
                                        newsList = newsList + "--------------------------\n";
                                    }
                                } else {
                                    tList.setString("Koneksi Error");
                                }
                            } catch (Exception e) {
                            }
                        }
                    }).start();
                } catch (Exception e) {
                }

                // write post-action user code here
            } else if (command == exitCommand) {
                // write pre-action user code here
                exitMIDlet();
                // write post-action user code here
            }
        }
        // write post-action user code here
    }

5. Lanjutkan untuk cmEdit, cmDelete, cmSave, cmCancel dan lainnya. Berikut ini kode program selengkapnya :

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;

import java.io.*;
import org.kxml2.io.*;
import org.xmlpull.v1.*;

public class MNews extends MIDlet implements CommandListener {

    private boolean midletPaused = false;

    //<editor-fold defaultstate="collapsed" desc=" Generated Fields ">
    private Form FMain;
    private TextField tList;
    private KXmlParser parser;
    private int jumlah = 0;
    private String sTitle[] = new String[100];
    private String sLink[] = new String[100];
    private String sDescription[] = new String[100];
    public void commandAction(Command command, Displayable displayable) {
        // write pre-action user code here
        if (displayable == FMain) {
            if (command == cmGet) {
                // write pre-action user code here
                try {
                    new Thread(new Runnable()
                    {
                        public void run()
                        {
                            try {
                                HttpConnection conn;
                                DataInputStream dis;
                                DataOutputStream dos;

                                conn = (HttpConnection) Connector.open("http://www.nytimes.com/services/xml/rss/nyt/National.xml");
                                conn.setRequestMethod(HttpConnection.GET);
                                conn.setRequestProperty("Content-Type", "text/xml");
                                dos = new DataOutputStream(conn.openDataOutputStream());

                                dis = new DataInputStream(conn.openDataInputStream());
                                if (conn.getResponseCode() == HttpConnection.HTTP_OK) {
                                    doParse(dis);
                                    String newsList = "";
                                    for (int i = 0; i < jumlah; i++) {
                                        newsList = newsList + sTitle + "\n";
                                        newsList = newsList + sLink + "\n";
                                        newsList = newsList + sDescription + "\n";
                                        newsList = newsList + "--------------------------\n";
                                    }
                                } else {
                                    tList.setString("Koneksi Error");
                                }
                            } catch (Exception e) {
                            }
                        }
                    }).start();
                } catch (Exception e) {
                }

                // write post-action user code here
            } else if (command == exitCommand) {
                // write pre-action user code here
                exitMIDlet();
                // write post-action user code here
            }
        }
        // write post-action user code here
    }
    public void doParse(InputStream isxml) {
        parser = new KXmlParser();
        try {
            parser.setInput(new InputStreamReader(isxml));
            parser.next();
            parser.require(XmlPullParser.START_TAG, null, "rss");
            parser.nextTag();

            parser.require(XmlPullParser.START_TAG, null, "channel");

                while (parser.nextTag() != XmlPullParser.END_TAG) {
                    parser.require(XmlPullParser.START_TAG, null, "title");
                    sTitle[jumlah] = new String("Title: " + parser.nextText());
                    parser.require(XmlPullParser.END_TAG, null, "title");
                    parser.nextTag();

                    parser.require(XmlPullParser.START_TAG, null, "link");
                    sLink[jumlah] = new String("Link: " + parser.nextText());
                    parser.require(XmlPullParser.END_TAG, null, "link");
                    parser.nextTag();
                   
                    parser.require(XmlPullParser.START_TAG, null, "description");
                    sDescription[jumlah] = new String("Description: " + parser.nextText());
                    parser.require(XmlPullParser.END_TAG, null, "description");
                    parser.nextTag();
                }
                parser.require(XmlPullParser.END_TAG, null, "channel");
                jumlah++;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

6. Klik Run untuk menjalankan aplikasi. Kemudian klik menu Get, maka akan ditampilkan Berita (News) dalam bentuk RSS dari Web (misalnya web New York Times). 

Membuat Bluetooth Chat dengan J2ME NetBeans


Bluetooth Chat dengan J2ME NetBeans
Untuk membuat aplikasi Bluetooth Chat di Java ME NetBeans dapat digunakan library import javax.microedition.io.*. Langkah-langkah pembuatannya sebagai berikut :

1. Buka Netbeans. Klik menu File-New Project. Pilih Categories : Java ME, Projects : Mobile Application. Klik Next. Pada dialog berikutnya, isikan Project Name : BlueChat. Kemudian cek Set As Main Project dan hilangkan cek pada Create Hello Midlet. Klik Next. Klik Next. Klik Finish.


2. Pada Project TreeView klik kanan, pilih New –Midlet. Kemudian akan muncul dialog, isikan Class Name : ChatController, package : my.blue. Klik Finish. Akan ditampilkan MIDlet kosong, isikan kode program berikut ini :

package my.blue;

import java.util.Vector;

import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.ConnectionNotFoundException;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Choice;

import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DataElement;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.UUID;

import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.L2CAPConnectionNotifier;
import javax.bluetooth.L2CAPConnection;

import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.BluetoothConnectionException;
import javax.bluetooth.ServiceRegistrationException;

public class ChatController extends MIDlet implements CommandListener
{
 private Display display = null;
 private Form mainForm = null;
 private ChoiceGroup devices = null;
 private TextField inTxt = null;
 private TextField outTxt = null;
 private Command exit = null;
 private Command start = null;
 private Command connect = null;
 private Command send = null;
 private Command select = null;
 private StringItem status = null;

 private LocalDevice local = null;
 private RemoteDevice rDevices[];
 private ServiceRecord service = null;
 private DiscoveryAgent agent = null;
 private L2CAPConnectionNotifier notifier;
 private L2CAPConnection connection = null;

 private static final String UUID_STRING = "112233445566778899AABBCCDDEEFF";

 private boolean running = false;

 public ChatController()
      {
     super();
     display = Display.getDisplay(this);
       mainForm = new Form("CHAT");
       devices = new ChoiceGroup(null,Choice.EXCLUSIVE);
       inTxt = new TextField("incoming msg:","",256,TextField.ANY);
       outTxt = new TextField("outgoing msg:","",256,TextField.ANY);
       exit = new Command("EXIT",Command.EXIT,1);
       start = new Command("START",Command.SCREEN,2);
       connect = new Command("CONNECT",Command.SCREEN,2);
       send = new Command("SEND",Command.SCREEN,2);
       select = new Command("SELECT",Command.SCREEN,2);
       status = new StringItem("status : ",null);
       mainForm.append(status);
       mainForm.addCommand(exit);
       mainForm.setCommandListener(this);
      }


 protected void startApp() throws MIDletStateChangeException
      {
     running = true;
       mainForm.addCommand(start);
     mainForm.addCommand(connect);
       display.setCurrent(mainForm);
     try
       {
        local = LocalDevice.getLocalDevice();
          agent = local.getDiscoveryAgent();
       }
     catch(BluetoothStateException bse)
       {
        status.setText("BluetoothStateException unable to start:"+bse.getMessage());
            try
              {
               Thread.sleep(1000);
            }
            catch(InterruptedException ie)
              {}
        notifyDestroyed();
       }
    }

 protected void pauseApp()
      {
     running = false;
       releaseResources();
      }

 protected void destroyApp(boolean uncond) throws MIDletStateChangeException
      {
     running = false;
       releaseResources();
    }

 public void commandAction(Command cmd,Displayable disp)
      {
     if(cmd==exit)
            {
           running = false;
             releaseResources();
             notifyDestroyed();
          }
     else if(cmd==start)
               {
              new Thread()
                     {
                      public void run()
                           {
                            startServer();
                           }
                     }.start();
               }
          else if(cmd==connect)
                     {
                      status.setText("searching for devices...");
                          mainForm.removeCommand(connect);
                          mainForm.removeCommand(start);
                          mainForm.append(devices);

                          DeviceDiscoverer discoverer = new DeviceDiscoverer(ChatController.this);
                          try
                             {
                                agent.startInquiry(DiscoveryAgent.GIAC,discoverer);
                             }

                          catch(IllegalArgumentException iae)
                             {
                      status.setText("BluetoothStateException :"+iae.getMessage());
                             }
                          catch(NullPointerException npe)
                             {
                      status.setText("BluetoothStateException :"+npe.getMessage());
                             }
                          catch(BluetoothStateException bse1)
                             {
                      status.setText("BluetoothStateException :"+bse1.getMessage());
                             }
                  }
                else if(cmd==select)
                          {
                               status.setText("searching devices for service...");
                                 int index = devices.getSelectedIndex();
                                 mainForm.delete(mainForm.size()-1);//deletes choiceGroup
                                 mainForm.removeCommand(select);

                                 ServiceDiscoverer serviceDListener = new ServiceDiscoverer(ChatController.this);
                                 int attrSet[] = {0x0100}; //returns service name attribute
                       UUID[] uuidSet = {new UUID(UUID_STRING,false)};

                                 try
                                    {
                                       agent.searchServices(attrSet,uuidSet,rDevices[index],serviceDListener);
                                    }
                                  catch(IllegalArgumentException iae1)
                                  {
                           status.setText("BluetoothStateException :"+iae1.getMessage());
                                  }
                                catch(NullPointerException npe1)
                                  {
                           status.setText("BluetoothStateException :"+npe1.getMessage());
                                  }
                                catch(BluetoothStateException bse11)
                                  {
                           status.setText("BluetoothStateException :"+bse11.getMessage());
                                  }
                               }
                      else if(cmd==send)
                                 {
                                        new Thread()
                                                 {
                                                public void run()
                                                       {
                                                      sendMessage();
                                                     }
                                               }.start();
                                           }

       }

//this method is called from DeviceDiscoverer when device inquiry finishes
 public void deviceInquiryFinished(RemoteDevice[] rDevices,String message)
      {
     this.rDevices = rDevices;
       String deviceNames[] = new String[rDevices.length];
       for(int k=0;k<rDevices.length;k++)
            {
           try
             {
           deviceNames[k] = rDevices[k].getFriendlyName(false);
             }
           catch(IOException ioe)
             {
              status.setText("IOException :"+ioe.getMessage());
               }
          }
     for(int l=0;l<deviceNames.length;l++)
            {
           devices.append(deviceNames[l],null);
          }
     mainForm.addCommand(select);
       status.setText(message);
    }

//called by ServiceDiscoverer when service search gets completed
 public void serviceSearchFinished(ServiceRecord service,String message)
      {
       String url = "";
     this.service = service;
       status.setText(message);
       try
         {
          url = service.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,false);
         }
       catch (IllegalArgumentException iae1)
         {}
     try
       {
     connection = (L2CAPConnection)Connector.open(url);
            status.setText("connected...");
            new Thread()
               {
                public void run()
                     {
                      startReciever();
                     }
               }.start();
       }
     catch(IOException ioe1)
       {
        status.setText("IOException :"+ioe1.getMessage());
       }
      }

 // this method starts L2CAPConnection chat server from server mode
 public void startServer()
      {
     status.setText("server starting...");
       mainForm.removeCommand(connect);
       mainForm.removeCommand(start);
       try
         {
            local.setDiscoverable(DiscoveryAgent.GIAC);

            notifier = (L2CAPConnectionNotifier)Connector.open("btl2cap://localhost:"+UUID_STRING+";name=L2CAPChat");

            ServiceRecord record = local.getRecord(notifier);
            String conURL = record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,false);
            status.setText("server running...");

            connection = notifier.acceptAndOpen();
            new Thread()
               {
                public void run()
                     {
                      startReciever();
                     }
               }.start();
         }
       catch(IOException ioe3)
         {
        status.setText("IOException :"+ioe3.getMessage());
         }
    }

 //starts a message reciever listening for incomming message
 public void startReciever()
      {
     mainForm.addCommand(send);
     mainForm.append(inTxt);
       mainForm.append(outTxt);
       while(running)
            {
           try
              {
            if(connection.ready())
                        {
                       int receiveMTU = connection.getReceiveMTU();
                         byte[] data = new byte[receiveMTU];
                         int length = connection.receive(data);

                         String message = new String(data,0,length);
                         inTxt.setString(message);
                      }
              }
           catch(IOException ioe4)
              {
              status.setText("IOException :"+ioe4.getMessage());
                  }
          }
     }

 //sends a message over L2CAP
 public void sendMessage()
      {
     try
       {
     String message = outTxt.getString();
            byte[] data = message.getBytes();
            int transmitMTU = connection.getTransmitMTU();
            if(data.length <= transmitMTU)
             {
              connection.send(data);
             }
        else
             {
              status.setText("message ....");
             }
       }
     catch (IOException ioe5)
       {
        status.setText("IOException :"+ioe5.getMessage());
       }
    }

 //closes L2CAP connection
 public void releaseResources()
      {
     try
       {
     if(connection != null)
                  connection.close();
            if(notifier != null)
                   notifier.close();
       }
     catch(IOException ioe6)
       {
        status.setText("IOException :"+ioe6.getMessage());
         }
    }
}

3. Pada Project TreeView klik kanan, pilih New –Midlet. Kemudian akan muncul dialog, isikan Class Name : DeviceDiscoverer, package : my.blue. Klik Finish. Akan ditampilkan MIDlet kosong, isikan kode program berikut ini :

package my.blue;

import java.util.Vector;

import javax.bluetooth.RemoteDevice;
import javax.bluetooth.DeviceClass;

import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.ServiceRecord;

public class DeviceDiscoverer implements DiscoveryListener
{
 private ChatController controller = null;
 private Vector devices = null;
 private RemoteDevice[] rDevices = null;

 public DeviceDiscoverer(ChatController controller)
      {
     super();
     this.controller = controller;
       devices = new Vector();
      }

 public void deviceDiscovered(RemoteDevice remote,DeviceClass dClass)
      {
     devices.addElement(remote);
      }

 public void inquiryCompleted(int descType)
      {
       String message = "";

     switch(descType)
            {
           case DiscoveryListener.INQUIRY_COMPLETED:
                       message = "INQUIRY_COMPLETED";
                     break;
           case DiscoveryListener.INQUIRY_TERMINATED:
                       message = "INQUIRY_TERMINATED";
                     break;
           case DiscoveryListener.INQUIRY_ERROR:
                       message = "INQUIRY_ERROR";
                     break;
          }

      rDevices = new RemoteDevice[devices.size()];
        for(int i=0;i<devices.size();i++)
             rDevices[i] = (RemoteDevice)devices.elementAt(i);

        controller.deviceInquiryFinished(rDevices,message);//call of a method from ChatController class
        devices.removeAllElements();

        controller = null;
      devices = null;
      }

 public void servicesDiscovered(int transId,ServiceRecord[] services)
      {}

 public void serviceSearchCompleted(int transId,int respCode)
      {}

}

4. Pada Project TreeView klik kanan, pilih New –Midlet. Kemudian akan muncul dialog, isikan Class Name : ServiceDiscoverer, package : my.blue. Klik Finish. Akan ditampilkan MIDlet kosong, isikan kode program berikut ini : 

package my.blue;

import javax.bluetooth.RemoteDevice;
import javax.bluetooth.DataElement;
import javax.bluetooth.DeviceClass;

import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.ServiceRecord;

public class ServiceDiscoverer implements DiscoveryListener
{
 private static final String SERVICE_NAME = "L2CAPChat";
 private ChatController controller = null;
 private ServiceRecord service = null;

 public ServiceDiscoverer(ChatController controller)
      {
     super();
       this.controller = controller;
      }

 public void deviceDiscovered(RemoteDevice remote,DeviceClass dClass)
      {}

 public void inquiryCompleted(int descType)
      {}

 public void servicesDiscovered(int transId,ServiceRecord[] services)
      {
     for(int j=0;j<services.length;j++)
            {
           DataElement dataElementName = services[j].getAttributeValue(0x0100);

             String serviceName = (String)dataElementName.getValue();

             if(serviceName.equals(SERVICE_NAME))
                           service = services[j];

             break;
          }
      }

 public void serviceSearchCompleted(int transId,int respCode)
      {
     String message = "";

       switch(respCode)
            {
           case DiscoveryListener.SERVICE_SEARCH_COMPLETED:
                         message = "SERVICE_SEARCH_COMPLETED";
                       break;
           case DiscoveryListener.SERVICE_SEARCH_ERROR:
                         message = "SERVICE_SEARCH_ERROR";
                       break;
           case DiscoveryListener.SERVICE_SEARCH_TERMINATED:
                         message = "SERVICE_SEARCH_TERMINATED";
                       break;
           case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:
                         message = "SERVICE_SEARCH_NO_RECORDS";
                       break;
           case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:
                         message = "SERVICE_SEARCH_DEVICE_NOT_REACHABLE";
                       break;
          }

       controller.serviceSearchFinished(service,message);//calling a method from ChatController class

     controller = null;
       service = null;
      }
}

5. Klik Run untuk menjalankan aplikasi. Kemudian sebagai client Klik Run lagi untuk menjalankan aplikasi kedua. Kemudian coba aplikasi Bluetooth Chat untuk berkomunikasi antar keduanya :