仅在debug + breakpoint中抛出异常

时间:2013-02-21 09:38:12

标签: java network-programming

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

所以我在Catch-Statement中处理了“disconnect clients”。但它永远不会发生。

但是,如果我在调试时运行服务器并在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--;
                }

            }
        }
    }


};

1 个答案:

答案 0 :(得分:0)

始终记住,调试可能会影响您的程序。特别是在检查变量时,jvm会导致调用很多toString()方法。如果一个toString()方法更改了其中一个对象的状态,结果将会更改。尝试像

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

查看程序是否真的跳入catch块或者disconnectClient方法有缺陷。如果你再添加一些System.out。您可能会看到程序停止。