You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java ObjectInputStream传输对象ClassCastException异常排查及线程终止咨询

备注:目前对GitHub操作不熟悉,暂未完成所有类文件的正确上传。


开发与复现说明

  • 开发环境基于VMware搭建,当前触发的报错不需要多PC/多VM环境即可复现
  • 项目基础逻辑:服务端从InitHandler类接收ClientInformation对象,随后启动两个客户端的匹配流程,当前迭代暂不实现安全相关逻辑
  • 问题复现步骤:
    • 先启动完成所需配置的“服务端”
    • 切换到“受控客户端”模式,填入要求的信息后尝试向服务端发送数据,触发报错
  • 已通过公开搜索排查解决方案,始终未定位到错误根源

触发报错的代码实现

Server.ServerInitializer类的完整代码:

package Server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerInitializer extends Thread {
    private int port;
    private ClientInformation[] ci = null;
    private ClientInformation c = null;
    private boolean run = true;
    ServerSocket serversocket;
    ObjectInputStream ois;
    Socket client;
    public ServerInitializer(int port, int clientlimit) {
        this.port = port;
        ci = new ClientInformation[clientlimit];
        start();
    }

    
    @Override
    public void run() {
        try
        {
            serversocket = new ServerSocket(port);
            while(run)
            {
                client = serversocket.accept();
                System.out.println("New Client Has Been Connected, ip:" + client.getInetAddress().getHostAddress());
                
                ois = new ObjectInputStream(client.getInputStream());
                c = (ClientInformation) ois.readObject();
                
                new ServerThread(ci,c, client, run);
            }
                serversocket.close();
        }
        catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public void terminate()
    {
        this.run = false;
    }
    public boolean getrun()
    {
        return run;
    }
}

报错堆栈

Exception in thread "Thread-0" java.lang.ClassCastException: class Startup.ClientInformation cannot be cast to class Server.ClientInformation (Startup.ClientInformation and Server.ClientInformation are in unnamed module of loader 'app')
at Server.ServerInitializer.run(ServerInitializer.java:35)

待解决的问题

  • 如果目前提供的信息不足以定位错误,需要补充哪些内容?
  • 如何通过现有terminate函数,终止其他类/线程中正在运行的所有while循环?当前写的实现是否足够?这部分逻辑后续会同时应用在服务端和客户端模块,目前因为上述类转换报错还没有完成这部分功能的测试。

内容的提问来源于stack exchange,提问作者Sea Haron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 08:57:02