Windows环境Java 8运行Soot命令报错:无法加载java.lang.CharSequence
解决Soot加载java.lang.CharSequence失败的问题
我之前在Windows上用Java 8跑Soot的时候也碰到过几乎一模一样的问题!当代码里有System.out.print这类IO相关语句就报错,没有的话完全正常,本质原因就是Soot无法正确读取带空格路径下的rt.jar,而IO语句会触发加载依赖CharSequence的核心类,所以才会暴露出这个问题。
给你几个亲测有效的解决办法:
方法一:用Windows短路径替代带空格的路径
Windows里带空格的目录可以用短路径(比如Program Files对应Progra~1)来规避引号解析的问题,修改后的命令如下:java -cp soot.jar soot.Main -cp ".;C:\Progra~1\Java\jre1.8.0_151\lib\rt.jar" Example_4方法二:把rt.jar复制到无空格的目录
把C:\Program Files\Java\jre1.8.0_151\lib\rt.jar复制到比如C:\Java\jre8\lib这种没有空格的路径下,然后修改命令:java -cp soot.jar soot.Main -cp ".;C:\Java\jre8\lib\rt.jar" Example_4方法三:检查Soot版本兼容性
如果上面两种方法都没用,可能是你用的Soot版本太旧,对Java 8的支持不够完善。建议更新到兼容Java 8的Soot版本(比如4.3.0及以上),再重新尝试。
为什么只有System.out.print的时候会报错?因为这个语句会触发加载java.io.PrintStream类,而这个类依赖java.lang.CharSequence等核心类,当Soot无法正确加载rt.jar里的这些类时,就会抛出错误;如果代码里没有这类IO操作,Soot不需要加载这些依赖类,所以就能正常运行。
内容的提问来源于stack exchange,提问作者sruthi ganesh
相关产品推荐
相关产品推荐

