jxl在linux环境下报java.lang.ArrayIndexOutOfBoundsException

Posted 空白-键

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jxl在linux环境下报java.lang.ArrayIndexOutOfBoundsException相关的知识,希望对你有一定的参考价值。


转自:http://lzqdll.blog.163.com/blog/static/200607183201111635447767/


java.lang.ArrayIndexOutOfBoundsException
Caused by: java.lang.System.arraycopy(Native Method)
Caused by: jxl.biff.StringHelper.getBytes(StringHelper.java:127)
Caused by: jxl.write.biff.WriteAccessRecord.<init>(WriteAccessRecord.java:59)
Caused by: jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:726)


以上错误只有在linux环境下才会出现,在windows下正常。


根据错误信息的提示,发现问题出在WriteAccessRecord文件里,分析代码发现,byte数组data的最大长度被定义为112,当被传入的参数userName达到一定长度时就会抛错。    
跟踪代码WritableWorkbookImpl发现,userName实际就是WorkbookSettings类中的writeAccess字段,亦即生成Excel是的用户信息。可能在linux环境UTF8下每个汉字的字节数为3位(Windows中是2位)的缘故,出现了上诉的奇异现象。  

只要在代码中强制设置变量WorkbookSettings.writeAccess的值即可,例如:  

WorkbookSettings settings = new WorkbookSettings ();
settings.setWriteAccess(null);
WritableWorkbook workbook = Workbook.createWorkbook(new File("C:/test.xls"), wb, settings);


以上是关于jxl在linux环境下报java.lang.ArrayIndexOutOfBoundsException的主要内容,如果未能解决你的问题,请参考以下文章

java打包后在linux环境下可以运行,在win下报找不到main class,但通过java -jar xxx.jar也正常,就是双击

将windows上面的项目拷贝到Linux环境下报错不能够找到对应的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table

LINUX下报仅有的JAVA错误,能判断是啥原因引起的吗

shell文件管理jenkins构建过程---window环境下报错:找不到shell文件

Java常见异常

Linux下报 No manual entry for 的解决方法