Tampilkan postingan dengan label JaVa. Tampilkan semua postingan
Tampilkan postingan dengan label JaVa. Tampilkan semua postingan

Minggu, 26 Mei 2013

Belajar Bahasa Pemrograman j-query dan ajax

Membuat aplikasi chat dengan php dan mysql pastinya sudah mengerti about php dan mysql (walaupun tidak banyak), karena pengalaman saya pribadi hanya menekuni proyek di atas Alhamdulillah pencakupan dasar-dasar php dan mysql sudah aya mengerti. selanjtnya bahasa pemograman J-query dan ajax sebagai pembelajaran tingkat lanjutnya sangat saya rekom kepada semua untuk di pelajari, karena bahasa pemograman yang satu ini yang paling banyak di bahas, dan paling mengikuti perkembangan zaman,

sebelumnya saya sangat ingin mengembangkan tutor tentang belajar j-query dan ajax dasar di Blog ini tapi, setelah saya "search" sana sini sudah banyak yang membahas tentang ini, malahan salah satunya ada yang mengajarkan dengan sisitem yang asik dan sangat mudah,

yuk sama-sama kita lihat
Belajar j-query Mulai dari nol (sangat dianjurkan) nah pada tutor ini anda akan di ajak pada pembelajaran yang beda dari yang lain, si penulis akan mengajak anda pada pembahasan yang asik sehingga kesan rumit pada kode-kode bahasa pemograman tersebut menjadi mudah di mengerti dan di ingat, di situ juga menggunakan istilah-istilah unik untuk memngajak pembacanya mengingat dan memahamai , malahan setelah 1 minggu sejak membaca tutor dari blog tersebut saya masih bisa mengingat tentang istilah "siapa-ngapain" dan "Tuhan-manusia". sayangnya tutor tersebut saat ini (sejak postingan ini du buat) hanya sampai pada bagian ke 7. ok dari pada penasaran meluncur aja di mari
Belajar JQuery yuk nih tutor dari situs legendaris http://www.ilmuwebsite.com tapi sayangnya saya gak temui bagian duanya
Belajar JQuery Mudah yang mau tutor dasar tapi lengkap sampai ke ajaknya ya boleh kunjungi ke situs tersebut

selajutnya saya juga nemuin ebook yang judul covernya Panduan Lengkap php Ajax J query. untuk ebook yang berjudul bahasa indonesia ini saya kasih ponten "100". di dalam ebook ini sudah mencakup dasar serta praktek pembuatannya langsung dengan j query dan ajax, langsung aja di mari

ok, sekian posting hai ini yuk sama-sama kita memulai start untuk pembelajaran pembahasan yang baru. nantikan proyek saya selanjutnya yang menggunakan bahsa pemograman ini , terimakasih

Jumat, 17 Mei 2013

Cara Membuat Aplikasi Chatting Java dan MySQL di Windows 7 Menggunakan Protokol TCP/IP

Cara Membuat Aplikasi Chatting Java dan MySQL di Windows 7 Menggunakan Protokol TCP/IP - Pada tulisann ini kita akan belajar tentang apa itu pemrograman jaringan. Dimulai dari kata PEMROGRAMAN dan JARINGAN. Pemrograman adalah suatu kegiatan membuat kode program dan selanjutnya program tersebut dijalankan. Jadi disini kita butuh pengetahuan tentang Pemrograman dan Pengetahuan tentang Jaringan. Untuk membuat aplikasi yang berbasis jaringan diperlukan pengetahuan tentang socket. Langsung saja kita mulai membuat aplikasi berbasis jaringan menggunakan Java dan MySQL. Karena pada kasus ini kita menggunakan Java sebagai bahasa pemrograman dan MySQL database nya dan komputer yang digunakan yaitu 64 bit jadi kebutuhan akan software disesuaikan .

Kebutuhan yang harus disiapkan :
  1. Sistem Operasi Windows 7
  2. Connector MySQL-ODBC 5.2
  3. MySQL Connector Java-5.0.5
  4. Jdk 1.7.0_07
  5. Xampp sebagai server
  6. Notepad
A. Persiapan

  1. pertama kita buat koneksi antara java dengan MySQL.copy paste file .jar yang ada didalam MysSQL
  2. kemudian instal Connector MySQL-ODBC 5.2
  3. instal Xampp sebagai server localhost
  4. buat database di Xampp dengan cara, buka browser anda, firefox dll, kemudian ketikkan ditempat url, localhost/phpmyadmin lalu enter.
  5. buat database dengan nama db_kafe, kemudian buat tabel dengan nama chat, yang isi field nya ID_pengirim, tanggal, waktu, isi. field-field ini digunakan untuk menampung data saat pengguna sedang chatting
  6. buat source code menggunakan bahasa pemrograman java seperti pada contoh dibawah ini terdapat 2 file yaitu ChatServer.java dan ChatClient.java atau Anda dapat mendowload source code di http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/chat-client-server.html
  7. taruh ke 4 file tersebut kedalam sebuah folder agar lebih mudah diakses.
  8. kompile ke 4 file tersebut..

Gambar Arsitektur dari Aplikasi Chatting


Selanjutnya adalah menjalankan program dengan menggunakan 4 komputer. Untuk koneksi antar komputer menggunakan wifi Ad-Hoc. Untuk membuat settinga adhoc silahkan klik http://inilahkomputerku.blogspot.com/2012/01/cara-seting-jaringan-ad-hoc-untuk-file.html

Hasil dari program yang telah kita modifikasi dengan ditambahkan script penyimpanan data ke databas adalah



Gambar 1. server

Gambar diatas merupak gambar dari program ChatServer.java, dimana saat pertama kali dijalankan server menungggu client masuk pada port 9999. Setelah ada client terhubung server akan menampilkan ip dan id yang digunakan oleh client serta menampilkan pesan yang ditulis oleh client.



Gambar 2. Client 1


Gambar 3. Client 2


Gambar 4. Client 3
Gambar diatas merupakan gambar bagaimana client akan terkoneksi ke server dengan menginputkan ip serta port yang digunakan oleh server. Setelah terkoneksi akan ditampilkan ip, port koneksi ke server dan id client itu sendiri. Kemudian akan menampilkan pesan yang dikirim oleh client ke server. Pada program ini terdapat beberapa client yang dapat terkoneksi ke server.

Selanjunya mari kita lihat record di database

 
Gambar 5. Record tabel
Pada gambar 5 merupakan media penyimpanan untuk isi pesan, id pengirim, serta waktu dan tanggal. Semua data yang diketikkan di oleh client akan tersimpan di tabel chat.

Rabu, 15 Mei 2013

Scrib Mengirim data ke sistem database menggunakan php

Scrib Mengirim data  ke sistem database menggunakan php
Tampilan chat
Demo          Ambil di sini

Aplikasi chat dengan PHP dan mysqlposting ini adalah lanjutan dari membuat Aplikasi chat dengan PHP dan mysql, dimana kita telah masuk ke dalam tahap untuk mengirim data ke sistem database menggunakan php. pada proyek kita kali ini ada beberapa bagian yang mengharuskan untuk berhubungan dengan database mysql diantaranya
saat login / mendaftar chat
saat menampilkan pesan dari database
saat mengirim pesan ke database
saat menampilkan daftar user yang online
dan saat logout di lakukan

1. Sistem login

pada halaman chat.php pastinya sudah mengerti bukan cara menampilkan login form menggunakan session? bila belum baca lagi Aplikasi chat dengan PHP dan mysql untuk sekedar mengingat saya bawa lagi potongan script chat.php pada fungsi login kemari

<? session_start();
function loginForm(){
    echo'
<div id="loginform">
<p align="center">APLIKASI CHAT<br>
</p>
<form name="login" action="periksa.php?op=in" method="post">
<table border="0" cellpadding="5" cellspacing="0" align="center">
    <tr>
        <td>Username</td>
        <td>:</td>
        <td>
          <input type="text" name="nama" placeholder="Namamu" />
        </span></td>
    </tr>
    <tr>
        <td>Situs</td>
        <td>:</td>
        <td>
          <input type="text" name="situs" placeholder="http://situsmu.net/" />
        </span></td>
    </tr>
    <tr align="right">
        <td colspan="3">
          <input type="submit" name="login" value="Login" />
        </td>
    </tr>
</table>

</form>
</div>
';}


keterangan :
  1. (warna) adalah halaman yang menjadi tempat proses pemasukan data dan pembuatan seasion sedangkan (warna) adalah data yang menunjukan atau tanda masuk (in) yang akan di tangkap oleh halaman periksa.php sesudah pengguna menekan tombol
  2. (warna) berorientasikan "name" pada fungsi input sebagai informasi atau tanda yang akan di tangkap oleh halaman periksa.php
  3. (warna) adalah funsi untuk menampilkan text informasi  pada kolom yang apabila kolom di klik maka informasi tersebut akan otomatis menghilang
penampakan form login seperti ini
saat login pada  proyek Aplikasi chat dengan PHP dan mysql akan diarahkan ke halaman periksa.php untu data yang kita kirimkan di proses di halaman ini , dalam pemosesran halamna ini menggunakan menggunakan  dua fungsi yaitu
  1. insert dan
  2. select
  3. adopsi session
untuk lebih jelasnya perhatikan script dari halaman periksa.php ini


<?php
session_start();
include "config.php";

$waktu = date("H:i");
$nama = $_POST['nama'];
$situs = $_POST['situs'];
$op = $_GET['op'];

$q=mysql_query("insert into chat(nama, pesan, waktu, status, situs)values
( '$nama', '$nama baru saja masuk','$waktu','on', '$situs')");


if($op=="in"){

    $cek = mysql_query("SELECT * FROM chat WHERE nama='$nama' AND situs='$situs'");
    if(mysql_num_rows($cek)==1){//jika berhasil akan bernilai 1
        $c = mysql_fetch_array($cek);
        $_SESSION['nama'] = $c['nama'];
        $_SESSION['situs'] = $c['situs'];
     
        if($c['nama']=="$nama"){
            header("location:chat.php");
        }
    }else{
         die("wahhhh,,,, traubel  <a href=\"javascript:history.back()\">ulangi</a>");
    }
}
keterangan

  1. (warna) halaman ini meminta kepada browser untuk mengangtifkan atau mengadopsi session sesuai perintah php
  2. (warna) metode include merupakan meode yang di gunakan untuk memasukan bagian halaman lain ke sebuah halaman, sedangkan include "config.php"; merpakan memasukan halaman confiq dimana halaman config.php ini berisi script jembatan bagi php untuk mengakses database. bila ada yang masih bingung coba search di goolge tentang php dan mysql metode delete, insert, update dll
  3. (warna)  nah ini yang menjadi sarung tangan bisbol atau penangkap data yang dikirimkan pada halaman login sebelumnya 
  4. (warna)  merupakan perintah mysql untuk memasukan data yang dikirim dan di tangkap ke database
  5. (warna)  yang ini mengambil perintah "in" pada halaman chat.php login form artinya masuk dan saat perinyah ini berjalan dia akan memeriksa pada table database nama dan situs yang cocok sesuai dengan data yang di masukan pada saat proses login, di situ juga terlihat fungsi script  untuk mengak ses tiap baris atau kolom database  (mysql_num_rows($cek)$c = mysql_fetch_array($cek);  dan pada (warna) menunjukan atau memerintah kan kepada browser untuk mengadopsi $c['nama']; atau kolom nama yang di masukan pada login form untuk di jadikan seasion $_SESSION['nama']
  6.   if($c['nama']=="$nama"){
                header("location:chat.php"); ---------> jika nama pada baris nama di database  cocok dengan nama yang dikirimkan lewat login form maka situs langsung  otomatis  diarahkan kembali ke chat.php
     jika tidak atau terjadi kendala maka akan keluar fungsi "echo" di mana keluar  peringatan untuk mengulang kembali proses login

    setelah di arahkan pada halaman chat.php maka secera otomatis akan membaca seasson pada browser yang sudah di perintahkan maka from yang akan di munculkan bukan lagi from login melainkann form chat,
    sampai disini saya yakin semuanya paling tidak sudah mngerti alur dari kerjaan scrip-script ini ,ternyata sangat asik bukan mempelajari php dan mysql ?
    ok, saya sangat welcome kepada pertanyaan ,dengan pertanyaan saya bisa merasa di hargai karena tulisan sederhana yang jauh dari kata sempurna ini ternyata di pelajari sunguh-sunguh oleh anda, maka dari itu ajukan pertanyaan saya akan sebisa mungkin menjawabnya

    ok, sampai disini pembahasan tentang  mengirim data  ke sistem database menggunakan php dalam bentuk login formnya , di lain waktu saya akan memposting kelanjutannya salam codding

Kamis, 09 Mei 2013

Mengirim Pesan data ke database mysql Chat PHP

Mengirim Pesan data ke database mysql Chat PHP - sekarang saatnya untuk memahami bagaimana aplikasi chat menggunakan php mysql ini dapat  mengirim pesan dan menampilkan pesan dari user untuk di lihat oleh pengguna lain. dalam kasus ini kita masih menggunkan script php yang dapat menghubungkan dengan database diantarnya bagaimana mengirim data ke database dan bagaimana mengambil pesan ke databas mysql. namun yang membuat rumit proyek ini adalah  pengiriman dan pengambilan data di fokus kan pada 1 halaman yaitu pada halaman chat.php sedangkan fungsi pengiriman dan pengambilanya di lakukan oleh halaman yang berbeda
  • message-line.php = untuk menampilkan dan mengambil data yang selanjutnya di tampilkan pada halaman Chat.php
  • post-message.php= Untuk mengirim data ke database 
semua itu dilakukan di belakang layar menggunakan fungsi java script  yang di dalamnya terdapat ajax sehingga tidak harus melakukan refresh halaman aplikasi ini untuk berkerja, denga java script ini aplikasi website chatting kita dapat berkerja secara sistematik,

coba di lihat pada halaman chat.php dan teukan bagian java script seperti ini


<script type="text/javascript">
// jQuery Document
$(document).ready(function(){
    //If user submits the form
    $("#submitmsg").click(function(){  
        var clientmsg = $("#usermsg").val();
        $.post("post-message.php", {text: clientmsg});              
        $("#usermsg").attr("value", "");
        return false;
    });
  
    //Load the file containing the chat log
    function loadLog(){      
        var oldscrollHeight = $("#chatbox").attr("scrollHeight") - 20;
        $.ajax({
            url: "message-line.php",
            cache: false,
            success: function(html){      
                $("#chatbox").html(html); //Insert chat log into the #chatbox div              
                var newscrollHeight = $("#chatbox").attr("scrollHeight") - 20;
                if(newscrollHeight > oldscrollHeight){
                    $("#chatbox").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div
                }              
              },
        });
    }
    setInterval (loadLog, 1000);    //Reload file every 2.5 seconds
  
    //If user wants to end session
    $("#exit").click(function(){
        var exit = confirm("Are you sure you want to end the session?");
        if(exit==true){window.location = 'index.php?logout=true';}      
    });
});
</script>

perhatikan dan pelajari script di atas, terdapat fungsi untuk mengirim pesan dengan post-message.php, 
 menampilkan pesan dengan message-line.php  dan ajax refresh,


sedangkan pada halaman-halaman tersebut masih menggunkan sistem php sederhana diantaranya manupulasi table database dan fungsi session, 

tentang css atau mempercantik atau pengembangannya silahkan di lakukan sendiri saya hanya menyampaikan dasarnya yang jauh dari kesempurnaaan

berakhir sudah proyek membuat Aplikasi chat dengan PHP dan mysql serta javascript  apabila terdapat kesalahan atau kekeliruan silahkan sampaikan menggunkan kotak komentar ,
kita sama-sama belajar dan memperbaiki untuk kelancaran hobi dalam meng-codding-kan website ,
atau ada yang tidak di mengerti isikan pada kotak komentar agar sama-sama kita mengsharingkan ilmu kita



Minggu, 05 Mei 2013

Cara Membuat Aplikasi Chat Dengan Program Java

Dalam tulisan ini akan membahas tentang aplikasi chat sederhana menggunakan bahasa pemrograman java. Aplikasi ini akan mengimplementasikan Class ServerSocket dan Class Socket, dikembangkan dengan NetBeans 7.2 Hasil tampilan dari aplikasi ini adalah seperti gambar di bawah ini
Tampilan ChatServer ketika sedang dijalankan
Tampilan Chat Client ketika sedang dijalankan
Pertama buat ChatServer.java
package com.andik.chatserver;

import java.io.*;
import java.net.*;
import java.util.*;

public class ChatServer {

    private static int uniqueId;
    private ArrayList<ChatServer.ClientThread> clients;
    private int port;
    private boolean keepGoing;

    public ChatServer() {
        this.port = 9999;
        clients = new ArrayList<>();
    }

    public void start() {
        keepGoing = true;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            while (keepGoing) {
                System.out.println("ChatServer waiting for Clients on port " + port + ".");
                Socket socket = serverSocket.accept();
                if (!keepGoing) {
                    break;
                }
                ChatServer.ClientThread t = new ChatServer.ClientThread(socket);
                clients.add(t);
                t.start();
                send("login~" + t.username + "~" + t.username + " sedang login...~Server~\n");
            }
            try {
                serverSocket.close();
                for (int i = 0; i < clients.size(); ++i) {
                    ChatServer.ClientThread tc = clients.get(i);
                    try {
                        tc.sInput.close();
                        tc.sOutput.close();
                        tc.socket.close();
                    } catch (IOException ioE) {
                    }
                }
            } catch (Exception e) {
                System.out.println("Exception closing the server and clients: " + e);
            }
        } catch (IOException e) {
            String msg = "Exception on new ServerSocket: " + e + "\n";
            System.out.println(msg);
        }
    }

    private synchronized void send(String message) {
        for (int i = clients.size(); --i >= 0;) {
            ChatServer.ClientThread ct = clients.get(i);
            if (!ct.writeMsg(message)) {
                clients.remove(i);
                System.out.println("Disconnected Client " + ct.username + " removed from list.");
            }
        }
    }

    private String getClients() {
        String s = "";
        for (ClientThread clientThread : clients) {
            s += clientThread.username + ":";
        }
        s += "---";
        System.out.println(s);
        return s;
    }

    private synchronized void remove(int id) {
        for (int i = 0; i < clients.size(); ++i) {
            ChatServer.ClientThread ct = clients.get(i);
            if (ct.id == id) {
                clients.remove(i);
                return;
            }
        }
    }

    public static void main(String[] args) {
        ChatServer server = new ChatServer();
        server.start();
    }

    private class ClientThread extends Thread {

        private Socket socket;
        private ObjectInputStream sInput;
        private ObjectOutputStream sOutput;
        private int id;
        private String username;

        public ClientThread(Socket socket) {
            id = ++uniqueId;
            this.socket = socket;
            System.out.println("Menciptakan Object Input/Output Streams");
            try {
                sOutput = new ObjectOutputStream(socket.getOutputStream());
                sInput = new ObjectInputStream(socket.getInputStream());
                String message = (String) sInput.readObject();
                username = message.split("~")[1];
                System.out.println(username + " masuk.");
            } catch (IOException e) {
                System.out.println("Exception creating new Input/output Streams: " + e);
            } catch (ClassNotFoundException e) {
            }
        }

        @Override
        public void run() {
            boolean keepGoing = true;
            while (keepGoing) {

                String message;
                try {
                    message = sInput.readObject().toString();
                } catch (IOException e) {
                    System.out.println(username + " Exception reading Streams: " + e);
                    break;
                } catch (ClassNotFoundException e2) {
                    break;
                }

                String type = message.split("~")[0];
                String pengirim = message.split("~")[1];
                String text = message.split("~")[2];
                String kepada = message.split("~")[3];
                String response;

                switch (type) {
                    case "postText":
                        response = "recieveText~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "postPrivateText":
                        response = "recievePrivateText~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "login":
                        response = "login~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "logout":
                        response = "logout~" + pengirim + "~" + text + "~" + kepada + "~\n";
                        send(response);
                        break;
                    case "list":
                        response = "list~server~" + getClients() + "~ ~ ~ ~ ~\n";
                        send(response);
                        break;
                }
            }

            remove(id);
            close();
        }

        private void close() {
            try {
                if (sOutput != null) {
                    sOutput.close();
                }
            } catch (Exception e) {
            }
            try {
                if (sInput != null) {
                    sInput.close();
                }
            } catch (Exception e) {
            }
            try {
                if (socket != null) {
                    socket.close();
                }
            } catch (Exception e) {
            }
        }

        private boolean writeMsg(String msg) {
            if (!socket.isConnected()) {
                close();
                return false;
            }
            try {
                sOutput.writeObject(msg);
            } catch (IOException e) {
                System.out.println("Error sending message to " + username);
                System.out.println(e.toString());
            }
            return true;
        }
    }
}

Ke Dua buat ChatClient.java
ChatClient.java ini merupakan antarmuka untuk client. Caranya adalah, klik menu File/ New File maka akan tampil dialog New File. Pilih Swing GUI Form pada list kategori dan pilih JFrame Form pada list File Types. Klik Next dan beri nama Class dengan ChatClient lalu akhiri dengan menekan tombol Finish
Buat desain seperti gambar di bawah ini

Desain Chat Client
Ubah variable jTextFiel1 menjadi serverTextField, jTextField2 menjadi portTextField, jTextField3 menjadi usernameTextField, jButton1 menjadi masukButton, jTextArea1 menjadi viewTextArea, jTextField4 menjadi postTextField, jButton2 menjadi kirimButton dan jTable1 menjadi clientTable
Jika semua sudah seperti gambar di atas, tinggal masukkan kode nya. Masukkan kode di bawah ini
package com.andik.chatclient;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Andik Hermawan
 */
public class ChatClient extends javax.swing.JFrame {

    /**
     * Creates new form ChatClient
     */
    private ObjectInputStream input;
    private ObjectOutputStream output;
    private Socket socket;
    private String server, username;
    private int port;
    private List<String> clients;

    public ChatClient() {
        clients = new ArrayList<>();
        initComponents();
    }

    public boolean start() {
        try {
            socket = new Socket(server, port);
        } catch (Exception ec) {
            System.out.println("Error connectiong to server:" + ec);
            return false;
        }

        String msg = "Connection accepted " + socket.getInetAddress() + ":" + socket.getPort();
        System.out.println(msg);

        try {
            input = new ObjectInputStream(socket.getInputStream());
            output = new ObjectOutputStream(socket.getOutputStream());
        } catch (IOException eIO) {
            System.out.println("Exception creating new Input/output Streams: " + eIO);
            return false;
        }

        new ChatClient.ListenFromServer().start();

        try {
            output.writeObject("login~" + username + "~" + username + " sedang login...~server~\n");
            output.writeObject("list~" + username + "~" + username + " sedang login...~server~\n");

        } catch (IOException eIO) {
            System.out.println("Exception doing login : " + eIO);
            disconnect();
            return false;
        }

        return true;
    }

    private void disconnect() {
        try {
            // TODO add your handling code here:
            output.writeObject("logout~" + username + "~" + username + " sudah logout...~Server~\n");
        } catch (IOException ex) {
            //Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            if (input != null) {
                input.close();
            }
        } catch (Exception e) {
        }
        try {
            if (output != null) {
                output.close();
            }
        } catch (Exception e) {
        }
        try {
            if (socket != null) {
                socket.close();
            }
        } catch (Exception e) {
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        viewTextArea = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        clientTable = new javax.swing.JTable();
        postTextField = new javax.swing.JTextField();
        kirimButton = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        serverTextField = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        portTextField = new javax.swing.JTextField();
        masukButton = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        usernameTextField = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        viewTextArea.setEditable(false);
        viewTextArea.setColumns(20);
        viewTextArea.setLineWrap(true);
        viewTextArea.setRows(5);
        viewTextArea.setFocusable(false);
        jScrollPane1.setViewportView(viewTextArea);

        jScrollPane2.setViewportView(clientTable);

        postTextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                postTextFieldActionPerformed(evt);
            }
        });

        kirimButton.setText("Kirim");
        kirimButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                kirimButtonActionPerformed(evt);
            }
        });

        jLabel2.setText("Server");

        serverTextField.setText("127.0.0.1");

        jLabel3.setText("Port");

        portTextField.setText("9999");

        masukButton.setText("Masuk");
        masukButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                masukButtonActionPerformed(evt);
            }
        });

        jLabel4.setText("Username");

        usernameTextField.setText("animous");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(postTextField)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(kirimButton))
                            .addComponent(jScrollPane1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(usernameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(masukButton)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(masukButton)
                    .addComponent(jLabel4)
                    .addComponent(usernameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(postTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(kirimButton))))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void masukButtonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        this.server = serverTextField.getText();
        this.port = new Integer(portTextField.getText());
        this.username = usernameTextField.getText();
        start();
    }

    private void kirimButtonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        try {
            String message = "postText~" + username + "~" + postTextField.getText() + "~all~\n";
            output.writeObject(message);
            postTextField.setText("");
        } catch (IOException ex) {
            Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void postTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        kirimButtonActionPerformed(evt);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ChatClient().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JTable clientTable;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JButton kirimButton;
    private javax.swing.JButton masukButton;
    private javax.swing.JTextField portTextField;
    private javax.swing.JTextField postTextField;
    private javax.swing.JTextField serverTextField;
    private javax.swing.JTextField usernameTextField;
    private javax.swing.JTextArea viewTextArea;
    // End of variables declaration

    class ListenFromServer extends Thread {

        @Override
        public void run() {
            while (true) {
                try {
                    String msg = (String) input.readObject();
                    String res;
                    String type = msg.split("~")[0];
                    String pengirim = msg.split("~")[1];
                    String text = msg.split("~")[2];
                    String kepada = msg.split("~")[3];
                    switch (type) {
                        case "recieveText":
                            res = pengirim + ": " + text;
                            viewTextArea.setText(viewTextArea.getText() + res + "\n");
                            break;
                        case "recievePrivateText":
                            res = pengirim + ": " + text;
                            if (kepada.equals(username)) {
                                viewTextArea.setText(viewTextArea.getText() + res + "\n");
                            }
                            break;
                        case "login":
                            viewTextArea.setText(viewTextArea.getText() + pengirim + " sedah login..." + "\n");
                            clients.add(pengirim);
                            break;
                        case "logout":
                            viewTextArea.setText(viewTextArea.getText() + pengirim + " telah logout..." + "\n");
                            clients.remove(pengirim);
                            break;
                        case "list":
                            setTable(text);
                            break;
                    }
                } catch (IOException e) {
                    System.out.println("Server has close the connection: " + e);
                    break;
                } catch (ClassNotFoundException e2) {
                }
            }
        }

        private void setTable(String text) {
            int rows = text.split(":").length - 1;
            Object[][] data = new Object[rows][1];
            for (int i = 0; i < rows; i++) {
                String t = text.split(":")[i];
                data[i][0] = t;
            }

            String[] header = {"Clients"};

            clientTable.setModel(new DefaultTableModel(data, header));
        }
    }
}

Aplikasi ini dapat dikembangkan menjadi aplikasi chat yang lebih komplit seperti voice call, video call dengan menggunakan JMF (Java Media Framework)
Untuk pengembangannya menggunakan JMF dilanjutkan nanti pada tulisan selanjutnya…
Semoga bermanfaat…

Sumber