jxl在服务器上运行时的莫名其妙的问题,阻塞,不报异常

dinghun8leech 2009-11-12 02:39:01
先贴一小段代码:
boolean throwE = false;
File templet = new File(templetPath+"\\ReaderTemplet.xls");
File out = new File(abstractPath + reader.getType() +".xls");
Workbook wb = null;
WritableWorkbook wwb = null;
try {
System.out.println("templet:"+templet.canRead());
System.out.println("out:"+out.canWrite());
wb = Workbook.getWorkbook(templet);
System.out.println("Workbook:"+wb);
try {
System.out.println("1");
wwb = Workbook.createWorkbook(out,wb);
System.out.println("2");
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
} catch (IOException e) {
Print.ln("建立xls文件出错");
Print.er(e);
throwE = true;
} catch (BiffException e) {
Print.ln("读取xls模板出错");
Print.er(e);
throwE = true;
} catch (Exception e) {
e.printStackTrace();
throwE = true;
}

为了调试,我前后加了两个捕捉所有异常的trycatch,仍旧无果,代码比较乱,呵呵。
每次监视时均显示,读入的模板xls文件存在,且可读,写出路径的可写出属性为true。
-----------------------------------------------------------------------------
具体现象:这是一个用到hibernate3和struts2的web网站,用到了jxl导出产品说明书的功能,在整个系统部署到apache_tomcat6上几个小时之后会出现好似当前线程卡死的现象,卡死处在wwb = Workbook.createWorkbook(out,wb);,无任何异常,程序没在往下走,xls文档被新建出来,只不过是个0k大小的,打不开。此问题在系统刚部署时不会出现,且出现后重启服务器就会消失,之后又出现,更讨厌的是这个情况在我本机eclipse上基本无法模拟,我今天在eclipse上挂了几个小时都没出问题。这个问题我观察了两周了,中途怀疑是jar包的问题又换了个jar包,结果还是会出错。
-----------------------------------------------------------------------------
问题:
1.这可能是什么原因造成的?什么方法或思路可能解决这个问题?
2.类似间发性的问题一般大家是采用什么方法对待的,我的方法太没效率了。
------------
最后谢谢大家。
...全文
354 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
从小就够炫 2010-12-16
  • 打赏
  • 举报
回复
本人也遇到和 楼主一样的问题,不过 我报出来的错误信息 是 内存溢出
java.lang.OutOfMemoryError: Java heap space

程序一走到这个地方Workbook.createWorkbook(out,wb) 就报溢出、
重启tomcat 没事,刚运行时候没事,过一段时间就出现这样的问题。痛苦很久无解决办法


fengfengshasha 2010-03-05
  • 打赏
  • 举报
回复
我也遇到同样的问题,费了2天时间了,还没解决,tomcat下正常,程序部署到jboss下就出问题了。哎。。。。
dinghun8leech 2009-12-08
  • 打赏
  • 举报
回复
url无错,我能确定,但是url出错应该会报异常才对,他什么异常都没有,就卡那儿不往下走了。部署后几小时没事,过一天就说不定有事了,几乎无法在本机上模拟出来。
craziose 2009-12-08
  • 打赏
  • 举报
回复
wwb = Workbook.createWorkbook(out,wb);
如果你这是 web 程序下的话那问题是你的url出了问题;File在web程序内默认路径是Tomcat_Home
如果是main下当我没说
dinghun8leech 2009-11-16
  • 打赏
  • 举报
回复
结了,问题未能找到原因,未能解决。我用导出pdf的模块代替了导出xls,绕过了这个问题。感谢大家的帮助,如果有天我找到原因了,定会在这里补上一贴,或是再开一新帖,补充一下原因和解决方法。
dinghun8leech 2009-11-14
  • 打赏
  • 举报
回复
回楼上,控制台无任何信息,我贴出来的代码即是出问题的地方,在
System.out.println("1");
wwb = Workbook.createWorkbook(out,wb);
System.out.println("2");
1和2之间,每次出问题时只打出了1,打不出2来,也就是说卡在了wwb = Workbook.createWorkbook(out,wb);这一步,且没有任何的异常、错误、警告信息,程序就是卡在这一步了。
目前仍未解决,我连jxl的源码都下下来准备调试了,eclipse上的tomcat开了一天,也没出错。。。。就服务器上的会出错。
lzh_me 2009-11-13
  • 打赏
  • 举报
回复
日志里没有异常,连警告提示也没有吗?
lz应该贴出问题的代码,这段不知是否是你调试之后的~~

注意到你提到:xls文档被新建出来,只不过是个0k大小的
这应该是没有保存excel,好像又绕到了wwb.close();没有关闭上了...

如果解决了,希望共享下解决方法...
portnet 2009-11-13
  • 打赏
  • 举报
回复
建议可以采用jconsole监控一下死锁的情况。
hhj112 2009-11-13
  • 打赏
  • 举报
回复
可以试着调整下TOMCAT中Xss的设置看下。
hhj112 2009-11-13
  • 打赏
  • 举报
回复
是否是创建的线程过多,超过了JVM的内存限制,造成线程阻塞。
dinghun8leech 2009-11-13
  • 打赏
  • 举报
回复
还是不行哟,昨晚五点半重启服务器,今天下午一点就又出问题了,调试信息显示jxl所要读取的文档和写出的文档均可以读写,而且可以重命名,这说明jxl在使用之前这两个文件没有被其他程序使用,也没有io流未关闭的问题,这样一来并发、close的问题都不是真正的问题原因了。
继续求助~
dinghun8leech 2009-11-12
  • 打赏
  • 举报
回复
6楼说的并发问题我也觉得有可能,一会加把锁试试,不过这要等到明天才能出结果了。
回7楼,我用的是hibernate,所有连接都是c3p0管理的,我这边确保了事务的正确提交和回滚,应该不是这个问题吧。。。
zl3450341 2009-11-12
  • 打赏
  • 举报
回复
你在本机没问题
开始没问题 过段时间就出问题
重启服务器就会消失
是不是操作数据库的问题呢
没有close?
道光2008 2009-11-12
  • 打赏
  • 举报
回复
多个线程同时占用File templet ,造成死锁,
建议方法前加线程同步
dinghun8leech 2009-11-12
  • 打赏
  • 举报
回复
回楼上,生成excel的资料确实来自于数据库,但生成操作是在hibernate的事务提交之后做的,难道会有问题??盼望楼上再来
代码间的舞者 2009-11-12
  • 打赏
  • 举报
回复
生成的excel文档的是否有访问数据库?是不是访问数据库时没有关闭连接?
dinghun8leech 2009-11-12
  • 打赏
  • 举报
回复
谢谢楼上两位的指点:我在这段程序正常情况下的必经之路上是有wwb.close();这一步的,但出现上述卡死/阻塞的问题后显然是无效的。应该可以排除wwb.close();这个问题了。
wangleileo 2009-11-12
  • 打赏
  • 举报
回复
wwb.close();
zhao_jackson 2009-11-12
  • 打赏
  • 举报
回复
一定要加上wwb.close(); 这个方法! 否则程序将会报错!

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧