如题
另,大家知不知道为什么这两天我能登陆到WWW.CSDN.NET,但要登陆到论坛必须用代理?

解决方案 »

  1.   

    ClassLoader cl = ClassLoader.getSystemClassLoader();
    Class c = cl.findLoadedClass("name");if (c != null)      ...  ...
      

  2.   

    楼上的,JBUILDER告诉我findLoadedClass是proected access in java.lang.ClassLoader
      

  3.   

    要是程序中访问可以通过 synchronized(类.class)来控制关注一下解决方案
      

  4.   

    你可以写一个自定义的ClassLoader类,扩展它来控制JVM的加载动作.
      

  5.   

    可以参考一下,这里只是简单描述。
    比如上面的findLoadedClass可以扩写为public /*
     *自定义加载类
    **/
    import java.io.*;public class MyClassLoader extends ClassLoader{

    //读取一个文件的内容
    private byte[] getBytes(String filename) throws IOException{
    File file=new File(filename);
    long len=file.length();
    byte[] raw=new byte[(int)len];

    FileInputStream fin=new FileInputStream(file);

    int r=fin.read(raw);

    if(r!=len) throw new IOException("Can't read all,"+r+"!="+len);
    fin.close();
    return raw;
    } private boolean compile(String javaFile) throws IOException
    {
    System.out.println("CCL:Compiling "+javaFile+"...");
    //调用系统的javac命令
    Process p=Runtime.getRuntime().exec("javac "+javaFile);
    try{
    //其他线程都等待这个线程完成
    p.waitFor();
    }catch(InterruptedException ie){
    System.out.println(ie);
    }
    int ret=p.exitValue();
    return ret==0;
    }

    public Class loadClass(String name,boolean resovle) throws ClassNotFoundException
    {
    Class clas=null;
    clas=findLoadedClass(name);

    //这里说明了包的表示
    String fileStub=name.replace('.','/');
    String javaFilename=fileStub+".java";
    String classFilename=fileStub+".class";

    File javaFile=new File(javaFilename);
    File classFile=new File(classFilename);

    //如果存在class文件就不编译
    if(javaFile.exists()&&(!classFile.exists()||javaFile.lastModified()>classFile.lastModified()))
    {
    try{
    if(!compile(javaFilename)||!classFile.exists())
    {
    throw new ClassNotFoundException("ClassNotFoundExcetpion:"+javaFilename);
    }
    }catch(IOException ie)
    {
    throw new ClassNotFoundException(ie.toString());
    }
    }

    try{
    byte[] raw=getBytes(classFilename);
    //通过读入数据来构造一个类结构,这是核心
    clas=defineClass(name,raw,0,raw.length);
    }catch(IOException ie){
    }
    if(clas==null)
    {
    clas=findSystemClass(name);
    }

    System.out.println("findSystemClass:"+clas);

    if(resovle && clas!=null)
    {
    resolveClass(clas);
    }

    if(clas==null)
    {
    throw new ClassNotFoundException(name);
    }
    return clas;
    }
    }/**
    *  测试自定义加载类MyClassLoader
    *
    */
    import java.lang.reflect.*;public class MyRun
    {
    public static void main(String[] args) throws Exception
    {
    String progClass=args[0];
    String progArgs[]=new String[args.length-1];
    System.arraycopy(args,1,progArgs,0,progArgs.length);

    MyClassLoader ccl=new MyClassLoader();

    Class clas=ccl.loadClass(progClass);

    //返回一个class的type
    Class[] mainArgType={(new String[0]).getClass()};
    Method main=clas.getMethod("main",mainArgType);
    Object argsArray[]={progArgs};
    main.invoke(null,argsArray);
    }
    }/**
    * 测试类.
    */
    public class Test{

    public static void main(String[] args)
    {
    if(args.length!=1)
    {
    System.err.println("Error,exit!");
    System.exit(1);
    }
    String name=args[0];
    System.out.println("Hello,"+name);
    }
    }运行如下:
    F:\>java MyRun Test Yzl
    findSystemClass:class java.lang.Object
    findSystemClass:class Test
    findSystemClass:class java.lang.String
    findSystemClass:class java.lang.System
    findSystemClass:class java.lang.StringBuffer
    findSystemClass:class java.io.PrintStream
    Hello,YzlF:\>
      

  6.   

    楼上的
    如果我的操作系统中运行了多个JAVA虚拟机怎么办?
      

  7.   

    楼上上的
    操作系统里不是可以运行多个java.exe进程的吗
      

  8.   

    同关注~ 我想知道java能不能直接监控进程运行状态的,就象windows进程管理器一样~