Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 类装载时在当前执行类编译时存在,却无法再找到??
skyandfly





发贴: 17
积分: 0
于 2005-08-29 21:35 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我想通过类装载器,装载一个类来运行,可是他却抛出:
java.lang.NoClassDefFoundError: thread (wrong name: thread/thread)
  at java.lang.ClassLoader.defineClass0(Native Method)
  at java.lang.ClassLoader.defineClass(Unknown Source)
  at java.lang.ClassLoader.defineClass(Unknown Source)
  at loader.PlayerLoader.findClass(TestLoader.java:32)
  at loader.TestLoader.main(TestLoader.java:53)
Exception in thread "main"

装载类:
class PlayerLoader extends ClassLoader{
public Class findClass(String name)throws ClassNotFoundException{
FileInputStream in = null;
int length = 0;
try {
in = new FileInputStream("./bin/thread/" + name+".class");
length = in.available();
if(length == 0)
throw new ClassNotFoundException(name);
byte[] buf = new byte[length];
in.read(buf);
return defineClass("thread",buf,0 ,buf.length);
} catch (IOException e) {

}finally{
try {
if(in != null)
in.close();
} catch (IOException e1){}
}
System.out.println("he");
return null;
}
}

public class TestLoader {
public static void main(String args[])throws InstantiationException, IllegalAccessException{
String name = "thread";


PlayerLoader loader = new PlayerLoader();
try {
Class c = loader.findClass(name);
System.out.println("hello");
thread t = (thread)c.newInstance();
t.start();
} catch(ClassNotFoundException e){}
}
}

被装载的.class文件的类如下:
public class thread extends Thread{
public volatile boolean bool = true;
public synchronized void put() throws InterruptedException{
while(!bool)
wait();
bool = false;
System.out.println(" the put !");
notifyAll();
}  
public synchronized String get(int i)throws InterruptedException{
while(bool)
wait();
bool = true;
System.out.println(" the get !");
notifyAll();
return "get";
}
public void run(){
try{
put();
get(2);
print();
}catch(InterruptedException e){

}

}
public void print()throws InterruptedException{
sleep(2000);
System.out.println("the print");
}
public static void main(String args[]){
new thread().start();
}
}

请问这是怎么回事情?我用打印buf发现里面有数据呀!




Java应用者与<IDE/环境>

话题树型展开
人气 标题 作者 字数 发贴时间
4464 类装载时在当前执行类编译时存在,却无法再找到?? skyandfly 2805 2005-08-29 21:35
3410 Re:类装载时在当前执行类编译时存在,却无法再找到?? wonderfuture 143 2005-09-01 06:39

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923