0

所以我有一个线程来接收来自客户端的数据。有一个 ObjectInputReader 来读取这个数据。如果在我的 try-catch 中无法初始化 ObjectInputReader,如果客户端在没有通知服务器的情况下断开连接会发生什么,try-catch 应该调用异常。

所以我在 Catch-Statement 中处理了我的“断开连接客户端”。但它永远不会发生。

但是,如果我在调试时运行服务器并在 Catch-Statement 中设置断点,那么就会发生异常,并且一切都按照我的意愿进行处理。但只有断点,永远不会没有(调试或发布)。

我正在使用eclipse,我认为是最新版本。

有人碰巧有这个“错误”吗?还是我做错了什么?

private static Runnable receive = new Runnable(){

    @Override
    public void run() {
        // TODO Auto-generated method stub
        ObjectInputStream ois;

        while(true)
        {
            for(int i = 0; i < listSockets.size();i++){
                try {
                    ois = new ObjectInputStream(listSockets.get(i).getInputStream());
                    int receiveState = (Integer)ois.readObject();

                    DataPackage dp = (DataPackage)ois.readObject();

                    listData.set(i,dp);

                    if(receiveState == 1){ //client disconnected by user
                        disconnectClient(i);
                        i--;
                    }

                    ois.close();
                } catch (IOException | ClassNotFoundException e) {
                    disconnectClient(i);
                    i--;
                }

            }
        }
    }


};
4

1 回答 1

0

始终牢记调试可能会影响您的程序。特别是当您检查变量时,jvm 会导致调用大量的 toString() 方法。如果一个 toString() 方法改变了你的一个对象的状态,结果就会改变。尝试类似的东西

} catch (IOException | ClassNotFoundException e) {
      System.out.println("I am here");
      disconnectClient(i);
      i--;
}

看程序是真的跳到catch块还是disconnectClient方法有缺陷。如果再添加几个 System.out。您可能会看到程序停止。

于 2013-02-21T10:22:03.063 回答