/Task_4-1

Exercise on Inner Class and Threading

Primary LanguageJava

Task_4

Exercise on Inner Class and Threading

Buatlah program java untuk chatting antar computer sebagai berikut

Package javaChat


Package berisi kelas-kelas Socket dan Network Programming [disediakan]

Package consoleApp


Package berisi kelas-kelas model

ConnectionThread.java

Buatlah class ConnectionThread.java sebagai berikut

  • extends Thread
  • import library berikut
    ![01] (/asset/01.JPG)
  • buatlah class sesuai class diagram berikut
    ![02] (/asset/02.JPG)

Constructor

  • Constructor throws IOException
  • Constructor mengeset attribut client dan menginstansiasi objek Connection dengan input client
    ![03] (/asset/03.JPG)

method run()

  • Merupakan method yang dijalankan saat thread diaktifkan
  • Thread akan aktif setiap ada Client baru yang terhubung ke Server
  • Thread akan berhenti ketika Client mengirimkan pesan "quit"
  • lakukan proses berikut dalam blok try-catch
  • jalankan proses chatting dengan memanggil method startChat(String) dari objek connection
    ![04] (/asset/04.JPG)
  • tampilkan informasi Client yang terhubung dengan method getClientInformation dari Objek connection
    ![05] (/asset/05.JPG)
  • lakukan proses loop membaca inputan text dari client dengan memanggil method readStream() dari objek connection selama input readStream masih membaca dan input String bukanlah "quit"
  • tampilkan pesan yang diterima dari client, dan kirimkan (broadcast) pesat tersebut ke client yang lain menggunakan method sendToAll() dari objek connection
    ![06] (/asset/06.JPG)
  • tampilkan pesan kepada semua client jika ada client yang keluar dari chat room, kemudian putuskan koneksi terhadap client tsb dengan memanggil method disconnect() dari object connection
    ![07] (/asset/07.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error

ConsoleApplication.java

Buatlah class ConsoleApplication.java sebagai berikut

  • buatlah class sesuai class diagram berikut
    ![08] (/asset/08.JPG)
  • class ReadInput dan WriteOutput merupakan Inner Class

inner class ReadInput

  • extends Thread
  • method run()
  • lakukan proses berikut dalam blok try-catch
  • Thread akan membaca input keyboard dari client dengan memanggil method inputString()
  • Mengirimkan hasil input keyboard ke server melalui method writeStream() selama input dari client bukanlah kata "quit"
    ![09] (/asset/09.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error

inner class WriteOutput

  • extends Thread
  • method run()
  • lakukan proses berikut dalam blok try-catch
  • Thread akan menerima pesan yang dikirimkan dari server melalui method readStream()
  • Menampilkan ke layar selama pesan dari server masih ada (bukan null)
    ![10] (/asset/10.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error

method startChat()

  • lakukan proses berikut dalam blok try-catch
  • Instansiasi objek ClientConnection
    ![11] (/asset/11.JPG)
  • Minta input alamat ip Server menggunakan method inputString()
  • Koneksikan ip client ke server dengan memanggil method connect(ip)
    ![12] (/asset/12.JPG)
  • Instansiasi dan jalankan Thread ReadInput dan WriteInput
    ![13] (/asset/13.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error

Package chatGUI


Package berisi kelas view GUI dan controller

ChatView.java

Buatlah class JFrame ChatView.java dengan tampilan sebagai berikut
![16] (/asset/16.JPG)

  • terdapat sebuah text area (txAreaChat)
  • set editable text area = false (uncheck editable)
  • tambahkan text "Input Server IP Address : " pada text area
    ![17] (/asset/17.JPG)
  • terdapat sebuah text field (txFieldChat)
  • tambahkan method getTxFieldChat() yang mengembalikan objek text field txFieldChat
  • tambahkan method getStringChat() yang mengembalikan String dari text field txFieldChat
  • tambahkan method setTxFieldChat(String) yang mengeset String pada text field txFieldChat
  • tambahkan method setTxAreaChat(String) yang menambahkan string pada baris baru pada text area txAreaChat
    ![18] (/asset/18.JPG)
  • import java.awt.event.ActionListener;
  • tambahkan method addListener(ActionListener e)
  • tambahkan add listener dengan memanggil method addActionListener pada text field txfieldChat
    ![19] (/asset/19.JPG)

ChatController.java

Buatlah class JChatController.java sebagai berikut

  • buatlah class sesuai class diagram berikut
    ![20] (/asset/20.JPG)
  • class WriteOutput merupakan Inner Class
  • import java.awt.event.ActionListener;
  • kelas implements ActionListener
  • implementasikan method actionPerformed(ActionEvent ae)

Constructor ChatController

  • Constructor menginstansiasi GUI view
  • set visible view = true
  • set lisener view dengan controller this
  • set client = null
    ![21] (/asset/21.JPG)

inner class WriteOutput

  • extends Thread
  • method run()
  • lakukan proses berikut dalam blok try-catch
  • Thread akan menerima pesan yang dikirimkan dari server melalui method readStream()
  • Menampilkan pesan ke text area view selama pesan dari server masih ada (bukan null) menggunakan method setTxAreaChat
    ![23] (/asset/23.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error

method actionPerformed(ActionEvent ae)

  • get Object source action event
    ![22] (/asset/22.JPG)
  • cek source action event
  • jika event berasal dari text field (tekan tombol enter di text field), cek apakah client sudah terhubung
  • jika client masih null
  • lakukan proses berikut dalam blok try-catch
  • instansiasi ClientConnection baru
  • Terima string ip dari user dengan memanggil method getStringChat dari objek view
    ![24] (/asset/24.JPG)
  • Instansiasi dan jalankan objek WriteOutput
    ![25] (/asset/25.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error
  • jika client sudah terbentuk (koneksi sudah terbentuk)
  • terima input dari view menggunakan method getStringChat()
  • kirimkan hasil input String ke server melalui method writeStream()
    ![26] (/asset/26.JPG)
  • hapus isi dari text field pada view menggunakan method setTxFieldChat
    ![27] (/asset/27.JPG)

Package driver


Package berisi kelas-kelas model

DriverServer.java

Buatlah class DriverServer.java sebagai berikut

  • kelas memiliki main method (psvm)
  • lakukan proses berikut dalam blok try-catch di dalam main method
  • Instansiasi objek ServerConnection dan tampilkan informasi server dengan memanggil method getServerInformation()
    ![14] (/asset/14.JPG)
  • Lakukan perulangan untuk menjalankan ConnectionThread setiap server menerima Client baru
  • Jalankan thread connection
    ![15] (/asset/15.JPG)
  • tambahkan pesan di blok catch untuk menampilkan pesan error
  • Jalankan kelas DriverServer

DriverClientConsole.java

Buatlah class DriverClient.java sebagai berikut

  • kelas memiliki main method (psvm)
  • instansiasi objek ConsoleApplication
  • panggil method startChat dari objek ConsoleApplication
  • Jalankan kelas DriverClientConsole
  • hubungkan dengan IP server
  • cobalah aplikasi chat console yang telah dibuat

DriverClientGui.java

Buatlah class DriverClientGui.java sebagai berikut

  • kelas memiliki main method (psvm)
  • instansiasi objek ChatController
  • Jalankan kelas DriverClientGui
  • hubungkan dengan IP server
  • cobalah aplikasi chat Gui yang telah dibuat