用defineClass报错问题 求教

cllncjh 2013-02-28 02:33:58

E:Plug.jar 是一个单独的Plug.class (没上层包)打的jar

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public class CompilingClassLoader extends ClassLoader {
public Class getClas(String filename,String classname) throws IOException {
File file = new File(filename);
try
{ System.out.println("be to the Cload");
System.out.println("classname:"+classname);
Class ctmp = this.findLoadedClass(classname);
System.out.println(ctmp.getName()+" is load");
System.out.println("over!!");
return ctmp;
}
catch(Exception exception)
{
System.out.println("memory is null");
}
long len = file.length();
byte[] raw = new byte[(int)len];
FileInputStream fis = new FileInputStream(file);
int r = fis.read(raw);
if(r!=len) throw new IOException ("Cat not read all"+r+"!="+len);
fis.close();
return defineClass("classname",raw,0,raw.length);
}

public static void main(String[] args) throws IOException {
String s = "E:/Plug.jar";
File file = new File(s);
CompilingClassLoader ccl = new CompilingClassLoader();
Class clas = ccl.getClas(s,"Plug.class");
}

}


Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1347093252 in class file classname
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at CompilingClassLoader.getClas(CompilingClassLoader.java:28)
at CompilingClassLoader.main(CompilingClassLoader.java:35)
...全文
314 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cllncjh 2013-02-28
  • 打赏
  • 举报
回复
JDK是1.6版的
lvzg_005 2013-02-28
  • 打赏
  • 举报
回复
jdk版本不一致
lvzg_005 2013-02-28
  • 打赏
  • 举报
回复
jar包编译用的jdk版本和这个class的版本是多少
cllncjh 2013-02-28
  • 打赏
  • 举报
回复
有人帮帮吗 新人求教啊 第一次发帖 答了就结
1、用AXMLPrinter2.jar反编译xxx.xml文件 解压xxx.apk,选择main.xml(也可选择其它xml文件,不过xml文件都是乱码),复制到AXMLPrinter2.jar所在目录,通过cmd 进入到AXMLPrinter2.jar所在目录,使用如下命令,得到的main.txt就是反编译后的文件,现在可以看懂了。 java -jar AXMLPrinter2.jar main.xml > main.txt 2、用baksmali-1.3.0.jar反编译xxx.dex文件 解压xxx.apk,将classes.dex拷贝至baksmali-1.3.0.jar所在目录,通过cmd进入baksmali-1.3.0.jar所在目录, 使用如下命令,得到classout文件夹,即classes.dex的全部反编译文件,后缀名都为xxx.smali。 java -jar baksmali-1.3.0.jar -o classout/ classes.dex 3、用smali-1.3.0.jar编译classout成classes.dex 通过上面得到的classout文件夹,通过以下命令我们可以再编译成classes.dex。 java -jar smali.jar classout/ -o classes.dex 4、使用dex2jar-0.0.7.9-SNAPSHOT将classes.dex反编译成xxx.class文件 将classes.dex拷贝至dex2jar-0.0.7.9-SNAPSHOT,cmd进入目录,使用如下命令即可 dex2jar classes.dex 如果出现如下错误: Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) 则是因为Java Compile Level和指定编译的JRE两者间的版本不一致导致;我的处理方法是重新按装JRE较高版本(我原来的是5.0)

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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