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

mumhunter 2006-07-07 11:45:31
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)
...全文
457 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rosifox 2006-07-07
  • 打赏
  • 举报
回复
拷错了,是下面:
clasz = findLoadedClass(name );

if (clasz != null)
return clasz;

if (clasz == null)
{
try
{
clasz = findSystemClass( name );
}
catch (ClassNotFoundException ce)
{
byte classData[]=loadClassData("f:/Person.class");
System.out.println(classData.length);
if (classData != null)
{
//成功读取字节码数据,现在把它转换成一个Class对象
clasz = defineClass( name, classData, 0, classData.length );
}
rosifox 2006-07-07
  • 打赏
  • 举报
回复
改成如下试试

CSDN - 专家门诊 - Java J2EE / EJB / JMS问题
回复 | 推荐 | 收藏 | 专题 | 公告 | 管理 | 关闭窗口
主  题: 大家来帮我解决一个关于类装载的问题(报:Exception in thread "main" java.lang.SecurityException)
作  者: mumhunter (hunter)
等  级:
信 誉 值: 100
所属论坛: Java J2EE / EJB / JMS
问题点数: 20
回复次数: 1
发表时间: 2006-07-07 11:45:33


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;

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


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

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

return clasz;

}
mumhunter 2006-07-07
  • 打赏
  • 举报
回复
请问这是什么原因啊,那个Person.java可是没有的包的(加包后也有问题)
这该怎么解决~~ 郁闷了好久,现请各位高手帮帮看看该咋改~~
mumhunter 2006-07-07
  • 打赏
  • 举报
回复
非常感谢 rosifox(下着鱼的天) 的回答~
经过你的修改,现已成功运行,再次谢谢了,现给你全分~
rosifox 2006-07-07
  • 打赏
  • 举报
回复
就是说对load类的操作,先由系统Loader去处理(譬如load 入Person之后紧接着需要load java.lang.String类),如果还出问题,你运行时虚拟机VM参数加上
-verbose:class,从输出可以看看在加载哪个类的时候出错

我的BLOG:http://ayufox.blogcn.com/
内容概要:本文介绍了一个基于Python与数字孪生技术的工业旅游园区运行监测系统的设计与实现。系统通过整合生产设备、环境传感器、客流统计和能源消耗等多源数据,构建统一的数据体系,并利用数字孪生模型实现园区的虚拟映射。系统架构涵盖数据采集、治理、时序存储、对象建模、智能分析与可视化展示五个层次,集成了数据清洗、异常检测(如Isolation Forest)、客流预测(如随机森林回归)、环境质量评价和综合运行评分等功能。通过FastAPI提供服务接口,支持实时监测、预警响应与科学决策,推动园区管理从人工向数据驱动转型。文中还提供了完整的数据生成、特征工程、模型训练与接口开发的代码示例。; 适合人群:具备Python编程基础,熟悉数据分析、机器学习及Web开发的技术人员,适用于高校学生、软件工程师、智能制造与智慧城市领域研究人员;尤其适合从事工业互联网、数字孪生、智慧园区等相关项目的1-3年工作经验开发者。; 使用场景及目标:①实现工业旅游园区的实时运行状态监控与三维可视化展示;②对客流、设备健康、环境舒适度与安全风险进行预测与预警;③为园区调度、应急管理、能源优化和游客服务提供数据支持与决策依据;④作为数字孪生教学案例,用于学习数据处理、模型构建与系统集成全流程。; 阅读建议:此资源结合理论模型与代码实践,建议读者在学习过程中同步运行示例代码,深入理解数据清洗、特征构造、算法建模与接口开发的关键步骤,并可进一步扩展至真实硬件接入、三维引擎集成与大规模部署应用。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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