客户端需从本地动态调用指定目录下的java application,但由于特殊要求需通过开启独立进程的方式运行.
请问Runtime.getRuntime().exec(" java " + className)中
className加载能否通过自定义ClassLoader实现?
如下所示:
class X { public static void doMethod(ClassLoader csl,String className){ //....待实现部分...//   
Runtime.getRuntime().exec("java " + className); }
}

解决方案 »

  1.   

    可以!
        ClassLoader classLoader=new MyClassLoder();
        Class c=classLoader.load(MyMain.class);
        c.getMethod("main",String[].class).invoke(c);
      

  2.   

    ClassLoader classLoader=new MyClassLoder();
    Class c =classLoader.load(MyMain.class);
    Method methodName = c.getDeclaredMethod("main", String[].class);
    c.newInstance().invoke(methodName, String[].class);
      

  3.   

    通过java反射机制+自定义ClassLoader虽然能实现,但当前调用方法与被调用的方法代码为同一进程.
      

  4.   

    能否通过自定义ClassLoader加载待执行的类并开启不同的进程,待执行的进程所需的资源都通过该ClassLoader自动加载啊?
      

  5.   

    可以先用ClassLoader加载类,将Class装进队列中,需要用的时侯从队列中取出来
      

  6.   

    请问将Class装进队列中,需要用的时侯从队列中取出来,这样能实现开启另一子进程吗?
      

  7.   

    没问题呀,不过是要先使用系统类加载器加载第一个类
    这个是没有办法改变的等于说你要使用一个固定的Main类来负责加载你的Main类!
      

  8.   

    通过A所在地Main方法加载B所在的Main方法,若要求B所在Main方法以独立进程的方式运行,java中好像只能通过Runtime.getRuntime().exec()的方式开启独立子进程,但目前B类所在lib目录未知并且系统也未设置classpath,也未能确定main方法运行所需的其它lib文件.我的设想是调用exec()方法时,jvm能自动根据我指定的classLoader记载B及其它class/资源文件.
      

  9.   

    classpath是被系统类加载起加载的,除非你自己改变ClassLoader的行为,否则他们还是会被
    系统类加载器加载 :
    类加载有一个一般的规则,就是加载前都会询问父加载器,只有父加载器加载失败时才会考虑自己加载。
    现有的类加载的关系
    引导类加载起-->扩展类加载器-->系统类加载器实际上他们的行为都是可以控制的!
      

  10.   

    在applet中创建本地子进程,本地子进程执行的应用程序来自于服务器端的className类.通过指定当前类的classLoader,Runtime.getRuntime().exec()执行时能自动根据classLoader找到className并加载该类及所需资源吗?