手机微信虚拟视频聊天, 用录像代替视频聊天, 微信聊天虚拟软件【jar】

117 阅读2分钟

文章附件下载: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);
}

}