| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A modern, feature-rich multi-client chat application built with Java 21, featuring both command-line and graphical user interfaces.
chat_app/ ├── src/ │ ├── main/ │ │ ├── java/com/chatapp/ │ │ │ ├── client/ # Client implementations │ │ │ │ ├── ChatClient.java │ │ │ │ └── ChatClientCLI.java │ │ │ ├── server/ # Server implementations │ │ │ │ ├── ChatServer.java │ │ │ │ └── ChatServerCLI.java │ │ │ ├── ui/ # GUI components │ │ │ │ ├── ClientUI.java │ │ │ │ ├── ServerUI.java │ │ │ │ └── TextAreaOutputStream.java │ │ │ └── common/ # Shared utilities │ │ │ ├── Message.java │ │ │ ├── MessageType.java │ │ │ └── ChatConfig.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ └── test/ # Unit tests ├── pom.xml # Maven configuration └── README.md
mvn clean compilemvn testmvn clean packageThis creates chat-application-2.0.0.jar in the target/ directory with all dependencies included.
mvn exec:java -Dexec.mainClass="com.chatapp.ui.ServerUI"Or run the packaged JAR:
java -jar target/chat-application-2.0.0.jarSteps:
mvn exec:java -Dexec.mainClass="com.chatapp.ui.ClientUI"Steps:
mvn exec:java -Dexec.mainClass="com.chatapp.server.ChatServerCLI" -Dexec.args="verbose"Optional verbose argument enables detailed logging.
mvn exec:java -Dexec.mainClass="com.chatapp.client.ChatClientCLI" -Dexec.args="localhost 8080"Arguments: <host> <port>
Terminal 1 - Start Server:
cd "g:\My Drive\GITHUB\java\chat_app"
mvn clean package
java -cp target/chat-application-2.0.0.jar com.chatapp.server.ChatServerCLI verboseTerminal 2 - Client 1:
java -cp target/chat-application-2.0.0.jar com.chatapp.client.ChatClientCLI localhost 8080
# Enter username: AliceTerminal 3 - Client 2:
java -cp target/chat-application-2.0.0.jar com.chatapp.client.ChatClientCLI localhost 8080
# Enter username: BobEdit src/main/resources/application.properties:
# Application Metadata
chat.app.name=Java Chat Application
chat.version=2.0.0
# Server Configuration
chat.max.clients=50 # Maximum concurrent clients
chat.default.port=8080 # Default server port
chat.verbose=false # Verbose logging
# Client Configuration
chat.client.reconnect.attempts=3
chat.client.reconnect.delay=2000ChatServer
├── Virtual Thread Executor (Java 21)
├── ServerSocket (accepts connections)
├── ConcurrentHashMap<String, ClientConnection>
└── Client Handlers (one per client)
├── Username Registration
├── Message Broadcasting
└── Disconnect Handling
Key Features:
ChatClient ├── Socket Connection ├── Virtual Thread Executor ├── Message Listener (background thread) └── Message Sender (main thread)
Key Features:
Run all tests:
mvn testRun specific test class:
mvn test -Dtest=ChatServerTestRun with coverage:
mvn clean test jacoco:report| Feature | Usage |
|---|---|
| Records | Message and ClientConnection immutable data classes |
| Virtual Threads | Scalable concurrent client handling |
| Pattern Matching | Switch expressions in Message.format() |
| Sealed Classes | Can be added for message type hierarchy |
| Text Blocks | Multi-line strings in documentation |
| Enhanced Switch | Modern switch expressions |
| Try-with-Resources | Automatic resource management |
Logs are written to:
Configure logging in src/main/resources/logback.xml.
The server automatically finds a free port. If running CLI server with a specific port:
# Server will auto-select a free port
java -cp target/chat-application-2.0.0.jar com.chatapp.server.ChatServerCLI verbose# Clean and rebuild
mvn clean install -U
# Skip tests if needed
mvn clean package -DskipTestsNote: This is a demonstration application. For production use, consider:
Contributions are welcome! Areas for enhancement:
This project is provided as-is for educational purposes.
Java Chat Application v2.0.0 - Modernized with Java 21
Enjoy chatting!
| Back | FazBrowse Home | New Git URL |