大家来帮我解决一个关于类装载的问题(报: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)
...全文
456 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/
【变分多谐波对偶模式追踪】从噪声信号中提取重复瞬态分量的方法(Matlab代码实现)内容概要:本文介绍了“变分多谐波对偶模式追踪”这一信号处理方法,旨在从含有噪声的信号中有效提取重复出现的瞬态成分。该方法结合了变分模态分解与多谐波分析的优势,通过构建对偶模式追踪模型,实现了对微弱瞬态特征的精准分离与增强,特别适用于机械故障诊断、生物医学信号处理等领域。文中详细阐述了算法原理、数学模型构建及其实现步骤,并提供了基于Matlab的代码实现,便于读者复现与应用。; 适合人群:具备一定信号处理基础,从事机械故障诊断、生物医学工程或相关领域的研究生及科研人员。; 使用场景及目标:①从强噪声背景中提取机械设备的周期性冲击信号以进行故障预警;②分析生物医学信号中的重复生理事件,如心电图或脑电图中的特定波形;③为需要高精度瞬态特征提取的研究提供可靠的算法支持与实现范例。; 阅读建议:此资源以Matlab代码实现为核心,不仅展示了算法的具体编程细节,还强调了理论与实践的紧密结合。学习者应在理解算法原理的基础上,动手运行并调试所提供的代码,通过改变参数观察结果变化,从而深入掌握该方法的应用技巧与优化策略。
内容概要:本文围绕“数据驱动下光伏建筑群源荷不确定性解析及其储能多目标低碳经济调度研究”展开,提出了一种融合数据驱动方法与多目标优化算法的综合调度框架。研究首先基于历史数据对光伏发电出力与建筑用电负荷的不确定性进行建模,通过场景生成与削减技术提取典型运行场景,并采用概率预测方法精确刻画源荷波动特征。在此基础上,构建了涵盖经济性、低碳性及系统运行稳定性等多重目标的储能优化调度模型,并引入NSGA-II等先进多目标进化算法求解Pareto最优解集,实现储能系统的协同优化与灵活调度。文中还基于Python语言完整实现了从数据预处理、不确定性建模、优化建模到算法求解的全流程,并通过具体仿真案例验证了所提方法在降低系统运行成本、提升可再生能源消纳水平、减少碳排放等方面的综合效益。; 适合人群:具备一定电力系统基础知识和Python编程能力,从事新能源调度、综合能源系统优化或低碳技术研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于光伏建筑群等分布式能源系统的储能优化调度;②支撑多目标优化在能源系统中的实践,实现经济与环保双重目标的平衡;③为相关课题研究提供可复现的代码框架与技术路线参考。; 阅读建议:建议读者结合文中提供的Python代码,深入理解不确定性建模、场景生成、多目标优化建模与求解的具体实现过程,并可通过调整参数或引入新模型进行拓展研究。

67,535

社区成员

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

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