Java 本来就是动态加载class的!
难道你是想:
class.forName("you class name");
难道你是想:
class.forName("you class name");
解决方案 »
- 怎么在txt文件中输入回车符?
- 在线等!帮帮忙!!!请问如何一周以后允许登录(数据库查询时间问题)???
- 请教:多态问题
- 怎样编写这个有用的JAVA程序
- [请教]java中不同程序对同一文件的访问
- 请教一个正则表达式 在线等!!!!
- 打算学JSP,想听听大家对JSP学习的意见
- 怎么给JBuilder 添加辊轴功能?
- (100分)哪里有Visual Cafe和Jbuilder 6下载?不要试用版.清各位大虾帮忙.
- 在Java中如何打印出控制台的文件
- 请教:java中如何调用linux下的静态连接库.a文件?
- 如何把用jdbc查出的resultset结果集数据通过网络发送到另一台机器上(给100分)
编译的时候
javac myJava.java -classpath "jar的路径;%classpath%"
运行
java myJava -classpath "jar的路径;%classpath%"
这样可以不需要事先把jar的路径加入到classpath里,只是在编译和运行需要用到该jar的文件的时候才加入
可能用ClassLoader能实现,但不知具体怎么办
import java.util.*;
import java.util.jar.*;
import java.lang.Exception.*;
import java.util.zip.*;
public class myClassLoader extends ClassLoader {
public synchronized Class loadClass(String className,String jarpath) throws ClassNotFoundException{
Class result = null;
byte[] classData = null;
try{
classData = getByteArrayFromJarFile(className,jarpath);
result = defineClass(className, classData, 0, classData.length);
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}
private byte[] getByteArrayFromJarFile(String className,String jarpath){
int len;
byte buffer[] = new byte[1024];
JarFile jarFile = null;
try{
jarFile = new JarFile(jarpath);
}catch(Exception ex){
}
className = className.replace('.','/');
try{
ZipEntry zipEntry = jarFile.getEntry(className+".class");
if(zipEntry!=null){
try{
InputStream inputStream = jarFile.getInputStream(zipEntry);
int arrayLength = inputStream.available();
byte[] bytes = new byte[arrayLength]; int pos = 0;
while (true) {
int n = inputStream.read(bytes, pos,arrayLength - pos);
if (n <= 0)
break;
pos += n;
}
inputStream.close();
return bytes;
}catch(IOException exp){
exp.printStackTrace();
}
}
}catch(Exception ex){
//ex.printStackTrace();
return null;
}
return null;
}
}