大家来帮我解决一个关于类装载的问题(报:Exception in thread "main" java.lang.SecurityException)

mumhunter mumhunter 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
public class Person {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
public static void main(String[] args)
{
Person p = new Person();
p.setName("zhoujm");
System.out.println(p.getName());
}
}
这是一个java类,我把它编译成Person.class后放在f盘 路径:F:/Person.class


import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.GeneralSecurityException;
import java.util.Hashtable;

public class ClassLoadTest extends ClassLoader{


public ClassLoadTest()
{}

public Class loadClass(String name, boolean resolve ) throws ClassNotFoundException
{

// try {
//我们要创建的Class对象
Class clasz = null;

//必需的步骤1:如果类已经在系统缓冲之中,
//我们不必再次装入它
clasz = findLoadedClass(name );

if (clasz != null)
return clasz;

byte classData[]=loadClassData("f:/Person.class");
System.out.println(classData.length);
if (classData != null)
{
//成功读取字节码数据,现在把它转换成一个Class对象
clasz = defineClass( name, classData, 0, classData.length );
}

if (clasz == null)
clasz = findSystemClass( name );

//必需的步骤3:如有必要,则装入相关的类
if (resolve && clasz != null)
resolveClass( clasz );

System.out.println("类已装载");

}

public byte[] loadClassData(String className){

File f ;
f = new File(className);
int size = (int)f.length();
byte buff[] = new byte[size];
FileInputStream fis;
try {
fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
dis.readFully(buff);
dis.close();
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

return buff;
}
/*
* @param args
*/
public static void main(String[] args) throws ClassNotFoundException {
// TODO 自动生成方法存根
ClassLoadTest clt = new ClassLoadTest();
clt.loadClass("Person",false);

}
}

我运行时报的错是:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:479)
at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at jiami.ClassLoadTest.loadClass(ClassLoadTest.java:43)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at jiami.ClassLoadTest.loadClass(ClassLoadTest.java:43)
at jiami.ClassLoadTest.main(ClassLoadTest.java:119)
...全文
评论 5
收藏 已收藏
分享
返回顶部
mumhunter
Java EE 67,535 成员 225,843 内容