java try catch块无法使用反射进行工作-不知道为什么,也可能是线程错误
||
在netbeans rcp中编写系统-不确定是否重要,我只是不信任rcp
我们正在系统上接近关键时间,并且不断发生以下错误(有时会在10分钟后发生,有时会运行2天,然后再发生,这使我相信这可能是线程错误)
我们有一个实现可运行的套接字读取器类-这是代码示例
@Override
public void run() {
while (!Thread.interrupted()) {
try {
/*
* can\'t display actual code
* reads data through socket and passes stream to a new handler class
* which uses reflection to create new object based off socket stream
* (none of this happens in a separate thread)
* (we\'re not holding a reference to the handler class - a new one is
* -created every iteration)
*
* at some point during the creation of this object, we get a socket
* closed exception happening at SocketInputStream.socketRead()
*/
} catch (Exception ex) {
cleanup();
}
}
}
我期望发生的是套接字异常应仅由catch块捕获并执行清除
最终发生的事情是我关闭了java.net.SocketException套接字,从而获得了可见的堆栈跟踪(在netbeans未捕获的异常窗口中弹出并在控制台中显示)-由于客户要求,我无法发布堆栈跟踪
另一个奇怪的是,在实际的套接字输入处理程序类中,我们具有以下方法(这是实际上从中引发异常的方法)
public Abstract________ new________(Class<? extends Abstract________> clazz,
DataInput input) {
...
try {
// reflection code here
} catch (Exception ex) {
LOG.error(\"...\");
throw new RuntimeException(ex);
}
...
}
如果我尝试在catch块之后手动抛出java.net.SocketException,则异常读取java.lang.RuntimeException:java.net.SocketException异常:套接字关闭
但是我们随机收到的堆栈跟踪只是说java.net.SocketException:套接字已关闭
这使我相信,在我们的套接字流处理类中,它甚至没有捕获到开始的异常。
是否有人对为什么会发生发生有任何意见???
也-非常抱歉,我无法发布实际的代码,我并不想变得晦涩难懂
到目前为止,我想知道的一件事-我对反射有所了解,但在很大程度上没有-当我手动抛出异常时,它总是被try catch块捕获-如果反射中的某个异常抛出了异常有没有什么办法可以打破“试捕合同”-我不知道为什么会这样,但我的意思是,我确实不确定并在这一点上抓住稻草
我已获得发布已编辑堆栈跟踪的权限
在MessageReader类中没有单独的线程-newMessage方法是捕获异常的地方,被包装到RuntimeException中并抛出该异常-____Reader是带有while循环的套接字读取器
两种方法都显示在堆栈跟踪中
不确定这是否有帮助
没有找到相关结果
已邀请:
2 个回复
茬贺努充尽
森含械