文章附件下载:www.pan38.com/dow/share.p… 提取密码:5081
这个微信聊天虚拟软件JAR项目包含以下功能和特点:
完整的Maven项目结构,包含pom.xml配置文件 实现了基本的聊天功能,包括消息发送和接收 使用JSON格式持久化存储聊天记录 简单的Swing图形用户界面 自动回复功能,模拟真实聊天体验 支持多用户聊天会话管理 消息模型支持多种消息类型(文本、图片、语音等) 要运行此项目,您需要:
安装JDK 11或更高版本 使用Maven构建项目:mvn clean package 运行生成的JAR文件:java -jar target/wechat-simulator-1.0.0.jar
com.wechat.simulator;
import com.wechat.simulator.core.ChatEngine; import com.wechat.simulator.model.User; import com.wechat.simulator.ui.ChatUI;
public class Main { public static void main(String[] args) { // 初始化用户 User currentUser = new User("1001", "AI助手"); User virtualUser = new User("1002", "虚拟好友");
// 初始化聊天引擎
ChatEngine engine = new ChatEngine(currentUser, virtualUser);
// 启动UI界面
ChatUI ui = new ChatUI(engine);
ui.show();
}
}
package com.wechat.simulator.model;
import java.util.Date;
public class Message { private String id; private User sender; private User receiver; private String content; private Date timestamp; private MessageType type;
public enum MessageType {
TEXT, IMAGE, VOICE, VIDEO, EMOJI
}
// 构造函数、getter和setter方法
public Message(String id, User sender, User receiver, String content, Date timestamp, MessageType type) {
this.id = id;
this.sender = sender;
this.receiver = receiver;
this.content = content;
this.timestamp = timestamp;
this.type = type;
}
// 省略其他getter和setter方法...
}
com.wechat.simulator.core;
import com.wechat.simulator.model.Message; import com.wechat.simulator.model.User; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.commons.lang3.RandomStringUtils;
import java.io.; import java.util.; import java.util.concurrent.ConcurrentHashMap;
public class ChatEngine { private final User currentUser; private final User virtualUser; private final Map<String, List> chatHistory; private final Gson gson; private static final String HISTORY_FILE = "chat_history.json";
public ChatEngine(User currentUser, User virtualUser) {
this.currentUser = currentUser;
this.virtualUser = virtualUser;
this.chatHistory = new ConcurrentHashMap<>();
this.gson = new Gson();
loadHistory();
}
public void sendMessage(Message message) {
String chatId = generateChatId(message.getSender(), message.getReceiver());
chatHistory.computeIfAbsent(chatId, k -> new ArrayList<>()).add(message);
saveHistory();
}
public List<Message> getChatHistory(User user1, User user2) {
String chatId = generateChatId(user1, user2);
return chatHistory.getOrDefault(chatId, new ArrayList<>());
}
private String generateChatId(User user1, User user2) {
return user1.getId().compareTo(user2.getId()) < 0 ?
user1.getId() + "_" + user2.getId() :
user2.getId() + "_" + user1.getId();
}
private void saveHistory() {
try (Writer writer = new FileWriter(HISTORY_FILE)) {
gson.toJson(chatHistory, writer);
} catch (IOException e) {
e.printStackTrace();
}
}
private void loadHistory() {
File file = new File(HISTORY_FILE);
if (file.exists()) {
try (Reader reader = new FileReader(file)) {
Map<String, List<Message>> loaded = gson.fromJson(
reader,
new TypeToken<Map<String, List<Message>>>(){}.getType()
);
if (loaded != null) {
chatHistory.putAll(loaded);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public String generateAutoReply(String input) {
// 简单的自动回复逻辑
String[] replies = {
"好的,我知道了",
"这个问题很有趣",
"让我想想...",
"我同意你的观点",
"我们可以稍后再讨论这个",
"谢谢分享!",
"哈哈,真有意思",
"我不太确定"
};
return replies[new Random().nextInt(replies.length)];
}
} com.wechat.simulator.ui;
import com.wechat.simulator.core.ChatEngine; import com.wechat.simulator.model.Message; import com.wechat.simulator.model.User;
import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date;
public class ChatUI { private final ChatEngine engine; private JFrame frame; private JTextArea chatArea; private JTextField inputField; private JButton sendButton;
public ChatUI(ChatEngine engine) {
this.engine = engine;
initializeUI();
}
private void initializeUI() {
frame = new JFrame("微信聊天模拟器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 600);
frame.setLayout(new BorderLayout());
// 聊天显示区域
chatArea = new JTextArea();
chatArea.setEditable(false);
chatArea.setLineWrap(true);
chatArea.setWrapStyleWord(true);
JScrollPane scrollPane = new JScrollPane(chatArea);
frame.add(scrollPane, BorderLayout.CENTER);
// 输入区域
JPanel inputPanel = new JPanel(new BorderLayout());
inputField = new JTextField();
sendButton = new JButton("发送");
inputPanel.add(inputField, BorderLayout.CENTER);
inputPanel.add(sendButton, BorderLayout.EAST);
frame.add(inputPanel, BorderLayout.SOUTH);
// 添加事件监听
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
});
inputField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
});
}
private void sendMessage() {
String content = inputField.getText().trim();
if (!content.isEmpty()) {
// 发送用户消息
Message userMessage = new Message(
System.currentTimeMillis() + "",
engine.getCurrentUser(),
engine.getVirtualUser(),
content,
new Date(),
Message.MessageType.TEXT
);
engine.sendMessage(userMessage);
appendMessage(userMessage);
inputField.setText("");
// 模拟自动回复
String reply = engine.generateAutoReply(content);
Message replyMessage = new Message(
System.currentTimeMillis() + "",
engine.getVirtualUser(),
engine.getCurrentUser(),
reply,
new Date(),
Message.MessageType.TEXT
);
engine.sendMessage(replyMessage);
appendMessage(replyMessage);
}
}
private void appendMessage(Message message) {
String prefix = message.getSender().equals(engine.getCurrentUser()) ? "我" : message.getSender().getName();
chatArea.append(prefix + ": " + message.getContent() + "\n");
}
public void show() {
frame.setVisible(true);
}
}