今天,在一个项目中,使用了我提供的一个jar,在运行到当JPython试图缓存该jar包中的类时,报解压出错:
java.lang.IllegalArgumentException
at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:284)
at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:237)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:73)
at org.python.core.CachedJarsPackageManager.getZipPackages(Unknown Source)
at org.python.core.CachedJarsPackageManager.addJarToPackages(Unknown Source)
at org.python.core.CachedJarsPackageManager.addJarToPackages(Unknown Source)
at org.python.core.PathPackageManager.addClassPath(Unknown Source)
at org.python.core.SysPackageManager.findAllPackages(Unknown Source)
at org.python.core.SysPackageManager.<init>(Unknown Source)
at org.python.core.PySystemState.initPackages(Unknown Source)
at org.python.core.PySystemState.initialize(Unknown Source)
at org.python.core.PySystemState.initialize(Unknown Source)
at org.python.core.PySystemState.initialize(Unknown Source)
at org.python.core.PySystemState.initialize(Unknown Source)
at org.python.core.PySystemState.<init>(Unknown Source)
at org.python.util.PythonInterpreter.<init>(Unknown Source)
at org.python.util.InteractiveInterpreter.<init>(Unknown Source)
at org.python.util.InteractiveInterpreter.<init>(Unknown Source)
at org.python.util.InteractiveInterpreter.<init>(Unknown Source)
很奇怪,我的jar应该是没问题的啊。
于是写了个简单的类来测试(核心就是从JPython中复制出来一个函数):
// Extract all of the packages in a single jarfile
public Hashtable getZipPackages(InputStream jarin) throws IOException {
Hashtable zipPackages = new Hashtable();
ZipInputStream zip = new ZipInputStream(jarin);
ZipEntry entry;
while ((entry = zip.getNextEntry()) != null) {
addZipEntry(zipPackages, entry, zip);
zip.closeEntry();
}
// Turn each vector into a comma-separated String
for (Enumeration e = zipPackages.keys(); e.hasMoreElements();) {
Object key = e.nextElement();
Vector[] vec = (Vector[]) zipPackages.get(key);
String classes = vectorToString(vec[0]);
if (vec[1].size() > 0) {
classes += '@' + vectorToString(vec[1]);
}
zipPackages.put(key, classes);
}
return zipPackages;
}
然后运行该类来解析我的jar包,每当执行到:
while ((entry = zip.getNextEntry()) != null)
这一句时就会抛出上面的异常。
用Systemout.print把entry的文件名打印出来,显示执行到其中一个xml文件后就抛异常,我怀疑是那个xml文件前后相关文件有问题,我就把该xml同级包路径里的文件全部删除,异常还是照样出现,但打印出来的最后一个文件名变成其他的了。因为该jar做过混淆,该不会是混淆导致的问题吧,可是暂时也没办法弄个未混淆的jar来测试,所以还是先从其他方面来分析。
看到异常信息中的 getUTF8String 函数,应该是与字符编码方式有关,会不会是中文字符导致的呢,我看了一个jar包中有个说明文件的文件名中有中文字符,我把中文字符删除,再测试,异常不再出现!!
原来是我手工加到jar包中的带中文文件名导致出错。以后得注意这个问题。
分享到:
相关推荐
在Java编程中,`java.lang.IllegalArgumentException` 是一个标准的运行时异常,它通常表示一个方法接收到的参数值不在预期范围内或者不合法。当尝试将一个无法转换为日期的对象格式化时,就会抛出"Cannot format ...
标题 "java.lang.Exception: java.lang.IllegalArgumentException: firstMovedIndex, lastMove" 描述了一个Java编程中的异常情况。这个异常通常发生在尝试执行一个不合法的操作时,例如数组或集合操作超出了其边界。...
在Java编程中,`java.lang.IllegalArgumentException` 是一个运行时异常,通常会在方法接收到非法或不合适的参数时抛出。这个错误信息 "Class not found: org.apache.struts2.validator" 指示程序在尝试加载名为 `...
在Android开发中,Java编程时常会遇到`java.lang.IllegalArgumentException`异常,这通常表示传入的参数不符合方法的要求。在本例中,错误信息“contains a path separator”提示我们问题可能与路径分隔符有关,这...
Caused by: java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.read(ImageIO.java:1388) at com.pleanwar.fiying.FlyingObject.loadImage(FlyingObject.java:52) at ...
在Java编程中,`java.lang.IllegalArgumentException` 是一个运行时异常,通常表示方法接收到了一个不合法或不适当的参数。这个错误消息 "Path search.page does not start with a \"/\" c" 指出问题出在路径字符串 ...
在Java编程过程中,`java.lang.IllegalArgumentException` 是一个常见的运行时异常,通常发生在方法接收到非法或不合适的参数时。这个异常表示一个方法调用的参数值不在预期的范围内,或者参数类型不符合方法的要求...
在Java编程中,`IllegalArgumentException` 是一个常见的运行时异常,属于`RuntimeException`的子类。这个异常通常在方法接收到不合法或不适当的参数时抛出。当一个方法需要接收特定类型的参数,而传入的参数明显不...
链接is unknown to this NavController
在整合Spring、Struts2和Mybatis的过程中,可能会遇到各种问题,其中之一就是`java.lang.IllegalArgumentException: Result Maps collection already contains value for X`。这个问题通常出现在Mybatis配置文件中,...
- **异常路径**:`java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.IllegalArgumentException` - **解释**:当传递给方法的参数无效时抛出。 - **示例...
Java demo源码 398.java.lang.IllegalArgumentException- 398.java.lang.IllegalArgumentException 复现bug demo 源码
对于Oracle,这可能是ojdbc.jar或其他特定版本的驱动包;对于MySQL,则是mysql-connector-java.jar。然后,通过以下步骤建立数据库连接: 1. 加载驱动:使用Class.forName()方法加载JDBC驱动的类。 2. 获取连接:...
解决在Linux系统下,POI、easyExcel 报错 java.lang.IllegalArgumentException: The workbook already contains a sheet named。原因是缺少了字体文件,如果是Docker部署使用本资源即可。内部提供字体资源以及代码...
在Java编程中,`java.lang.NoSuchMethodException`异常通常表明在运行时尝试调用一个不存在的方法。这个错误在上传文件时出现,可能是由于在控制器方法的签名与前端发送请求时的参数不匹配导致的。在描述中提到的...
`java.lang.ExceptionInInitializerError` 是Java编程语言中一个特殊的运行时异常,它通常表示在类的静态初始化过程中发生了异常。这个错误不是因为类的构造函数,而是由于静态变量初始化或者静态初始化块(也称为...
8. **`java.lang.IllegalArgumentException`** - 方法接收非法或不合适的参数时抛出此异常。 9. **`java.lang.IllegalAccessException`** - 当试图访问或修改类、字段、方法或构造函数时没有适当的权限时抛出此异常...
总之,“java.security.InvalidKeyException: Illegal key size”是一个与Java加密策略相关的错误,通过更新`local_policy.jar`和`US_export_policy.jar`文件可以有效地解决。这个过程涉及到对Java安全策略的理解,...
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: HelloJNIActivity.class ``` 这是因为`javah`命令期望的是类的全名,而不是包含扩展名的文件名。解决方法是只提供类的...