Exercise on Inner Class and Threading
Buatlah program java untuk chatting antar computer sebagai berikut
Package berisi kelas-kelas Socket dan Network Programming [disediakan]
Package berisi kelas-kelas model
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 throws IOException
- Constructor mengeset attribut client dan menginstansiasi objek Connection dengan input client
![03] (/asset/03.JPG)
- 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
Buatlah class ConsoleApplication.java sebagai berikut
- buatlah class sesuai class diagram berikut
![08] (/asset/08.JPG) - class ReadInput dan WriteOutput merupakan Inner Class
- 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
- 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
- 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 berisi kelas view GUI dan controller
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)
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 menginstansiasi GUI view
- set visible view = true
- set lisener view dengan controller this
- set client = null
![21] (/asset/21.JPG)
- 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
- 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 berisi kelas-kelas model
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
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
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