生成java聊天框,实现两人登录进行对话,并能连接数据库保存聊天内容
时间: 2023-12-03 20:42:10 浏览: 39
要实现这个功能,你需要掌握以下几个技能:
1. Java Swing GUI编程:Java Swing 是 Java 中用于创建桌面应用程序的 GUI 工具包。你需要掌握如何使用 Swing 创建窗口、文本框、按钮等 GUI 组件。
2. Java Socket 编程:Socket 是一种用于网络通信的 API。你需要掌握如何使用 Socket 在两个计算机之间建立连接,并通过连接发送和接收数据。
3. Java 数据库连接:Java 可以通过 JDBC 连接到各种关系型数据库,如 MySQL、Oracle 等。你需要掌握如何使用 JDBC 连接到数据库,并执行 SQL 查询和更新操作。
以下是一个简单的示例代码,用于实现两人登录进行对话,并连接数据库保存聊天内容:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.sql.*;
public class ChatBox extends JFrame implements ActionListener {
private JTextArea chatArea;
private JTextField inputField;
private JButton sendButton;
private String username;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private Connection conn;
public ChatBox(String username) {
super("ChatBox - " + username);
this.username = username;
// 创建 GUI 组件
chatArea = new JTextArea();
chatArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(chatArea);
inputField = new JTextField(30);
sendButton = new JButton("Send");
sendButton.addActionListener(this);
// 将组件添加到窗口
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(scrollPane, BorderLayout.CENTER);
panel.add(inputField, BorderLayout.NORTH);
panel.add(sendButton, BorderLayout.EAST);
add(panel);
// 连接服务器
try {
socket = new Socket("localhost", 12345);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
out.println(username + " has joined the chat.");
} catch (IOException e) {
e.printStackTrace();
}
// 连接数据库
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/chatbox", "root", "password");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
// 启动接收消息的线程
new Thread(new ReceiveThread()).start();
// 设置窗口大小、位置和关闭方式
setSize(400, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
// 发送消息
String message = inputField.getText();
out.println(username + ": " + message);
inputField.setText("");
// 保存消息到数据库
try {
PreparedStatement stmt = conn.prepareStatement("INSERT INTO messages (sender, content) VALUES (?, ?)");
stmt.setString(1, username);
stmt.setString(2, message);
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
private class ReceiveThread implements Runnable {
public void run() {
try {
String message;
while ((message = in.readLine()) != null) {
chatArea.append(message + "\n");
// 保存消息到数据库
try {
PreparedStatement stmt = conn.prepareStatement("INSERT INTO messages (sender, content) VALUES (?, ?)");
stmt.setString(1, message.split(":")[0]);
stmt.setString(2, message.split(":")[1]);
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
String username = JOptionPane.showInputDialog("Enter your username:");
new ChatBox(username);
}
}
```
说明:
1. 该程序需要在本地启动一个 MySQL 数据库,并创建名为 `chatbox` 的数据库和一个名为 `messages` 的表,表结构如下:
```sql
CREATE TABLE messages (
id INT PRIMARY KEY AUTO_INCREMENT,
sender VARCHAR(20),
content VARCHAR(255),
time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
2. 程序使用 Socket 在本地连接到一个监听在 12345 端口的服务器。
3. 程序启动后,会弹出一个对话框要求输入用户名。
4. 每次发送消息时,程序会将消息发送给服务器,并将消息的发送者和内容保存到数据库中。
5. 每次接收到消息时,程序会将消息显示在聊天框中,并将消息的发送者和内容保存到数据库中。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)