Of course! "Java sendmessage" is a broad topic because "send message" can mean many different things depending on the context. Here’s a comprehensive guide covering the most common interpretations, from simple console output to advanced messaging systems.

I'll break it down into the following scenarios:
- The Basics: Printing to the Console
- GUI Applications: Displaying a Message in a Window
- Client-Server Communication: Sending a Message over a Network (Socket)
- Modern Asynchronous Messaging: Using a Message Queue (RabbitMQ example)
- Sending Notifications: Sending an Email (using JavaMail)
The Basics: Printing to the Console
This is the most fundamental way to "send a message" in Java. It's used for logging, debugging, and simple command-line interaction.
Code Example:
public class ConsoleMessage {
public static void main(String[] args) {
// A simple string message
System.out.println("Hello, this is a message from Java!");
// A message with a variable
String userName = "Alice";
System.out.println("Welcome, " + userName + "!");
// Using formatted strings (recommended for complex messages)
int userScore = 100;
System.out.printf("User %s has a score of %d.%n", userName, userScore);
}
}
System.out.println(): Prints a message to the console and adds a new line at the end.System.out.print(): Prints a message without adding a new line.System.out.printf(): Prints a formatted string, similar to C'sprintf.
GUI Applications: Displaying a Message in a Window
If you're building a graphical user interface (GUI), "send message" usually means showing a dialog box to the user. The standard library for this is Swing.
Code Example (using Swing):
import javax.swing.JOptionPane;
public class GuiMessage {
public static void main(String[] args) {
// Display a simple information message dialog
JOptionPane.showMessageDialog(null, "This is an informational message.");
// Display a warning message dialog
JOptionPane.showMessageDialog(null, "Warning: File not found!", "Warning", JOptionPane.WARNING_MESSAGE);
// Display an error message dialog
JOptionPane.showMessageDialog(null, "A critical error has occurred.", "Error", JOptionPane.ERROR_MESSAGE);
// Display a confirmation dialog (Yes/No/Cancel)
int option = JOptionPane.showConfirmDialog(null, "Do you want to save your changes?");
if (option == JOptionPane.YES_OPTION) {
System.out.println("User chose YES.");
} else if (option == JOptionPane.NO_OPTION) {
System.out.println("User chose NO.");
} else {
System.out.println("User chose CANCEL.");
}
}
}
JOptionPaneis a utility class in Swing that provides pre-configured dialog boxes for simple interactions.- The
nullargument as the first parameter centers the dialog on the screen.
Client-Server Communication: Sending a Message over a Network
This is a common pattern for applications where two or more systems need to communicate. We'll use Java Sockets, which provide a low-level way to send data over a TCP/IP network.

Server Code (Listens for messages and prints them):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
int port = 6789;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
// The server waits here for a client to connect
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress());
// Set up to read data from the client
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String messageFromClient = in.readLine();
System.out.println("Message received from client: " + messageFromClient);
} catch (IOException e) {
System.out.println("Server exception: " + e.getMessage());
e.printStackTrace();
}
}
}
Client Code (Connects to the server and sends a message):
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SimpleClient {
public static void main(String[] args) {
String hostName = "localhost"; // or the server's IP address
int port = 6789;
try (Socket socket = new Socket(hostName, port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
System.out.println("Connected to server. Sending message...");
// The actual "send message" part
out.println("Hello from the Java client!");
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
}
}
How to run it:
- Run the
SimpleServerclass first. It will wait. - Run the
SimpleClientclass. The server will receive the message "Hello from the Java client!".
Modern Asynchronous Messaging: Using a Message Queue
For large-scale, decoupled, and reliable applications, direct sockets are often replaced by a Message Queue. The producer application sends a message to a queue, and one or more consumer applications process it. This is highly scalable and resilient.
We'll use RabbitMQ as a popular example.
Prerequisites:
- Install RabbitMQ on your machine or use a cloud service.
- Add the RabbitMQ Java client library to your project (e.g., in Maven, add this to your
pom.xml):<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.16.0</version> <!-- Use the latest version --> </dependency>
Producer Code (Sends the message):
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConnectionFactory;
public class RabbitMQProducer {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
// 1. Create a connection factory
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost"); // RabbitMQ server address
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// 2. Declare a queue (idempotent - won't create if it already exists)
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 3. Create the message
String message = "Hello, this is a message from RabbitMQ!";
// 4. Send the message to the queue
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
}
}
Consumer Code (Listens for and receives the message):
import com.rabbitmq.client.*;
import java.io.IOException;
public class RabbitMQConsumer {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
// 1. Create a DeliverCallback to handle incoming messages
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
// 2. Start consuming messages from the queue
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
}
How to run it:
- Run the
RabbitMQConsumer. It will wait for messages. - Run the
RabbitMQProducer. The consumer will immediately print the received message.
Sending Notifications: Sending an Email
A very common business requirement is to "send a message" via email. The standard library for this in Java is JavaMail.
Prerequisites:
- Download the JavaMail API and the Jakarta Mail implementation (if using Java 11+).
- Maven Dependency:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version> <!-- Use the latest version --> </dependency>
- Maven Dependency:
- You'll need access to an SMTP server (like Gmail, Outlook, or your company's server). For Gmail, you may need to allow "less secure apps" or create an App Password.
Code Example:
import jakarta.mail.*;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;
import java.util.Properties;
public class EmailSender {
public static void sendEmail(String to, String subject, String text) {
// 1. Set up mail server properties
String host = "smtp.gmail.com"; // e.g., smtp.gmail.com
Properties properties = System.getProperties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true"); // For TLS
// 2. Get the Session object
// Replace with your email and password/app password
final String username = "your-email@gmail.com";
final String password = "your-app-password";
Session session = Session.getInstance(properties, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// 3. Create a MimeMessage object
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setText(text);
// 4. Send the message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
public static void main(String[] args) {
sendEmail("recipient@example.com", "Test Subject", "This is a test email sent from Java.");
}
}
Summary: Which One Should You Use?
| Scenario | Technology | Best For... |
|---|---|---|
| Debugging / CLI Apps | System.out.println() |
Simple text output to the console. |
| Desktop GUI Apps | JOptionPane (Swing) |
Quickly showing information, warnings, or getting user input in a window. |
| Direct App-to-App | Java Sockets | Simple, direct communication between two specific services. |
| Decoupled, Scalable Systems | Message Queues (RabbitMQ, Kafka) | Microservices, background jobs, event-driven architectures. |
| User Notifications | JavaMail | Sending transactional emails, newsletters, alerts. |
