我想写一个程序来编译和运行另外一个程序,比如说Judge.java和一个Hello.java在同一个目录下,现在我想运行Judge.java来编译和运行Add.java程序,下面是我的代码:public class Judge
{
    public static void main(String args[])
    {
        try
        {            
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("javac Hello.java");
            proc=rt.exec("java Hello");
            InputStream stderr = proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            System.out.println("<ERROR>");
            while ( (line = br.readLine()) != null)
                System.out.println(line);
            System.out.println("</ERROR>");
            int exitVal = proc.waitFor();
            System.out.println("Process exitValue: " + exitVal);
        } catch (Throwable t)
          {
            t.printStackTrace();
          }
    }
}然而运行结果却是:
<ERROR>
java.lang.NoClassDefFoundError: Hello
Exception in thread "main"
</ERROR>
Process exitValue: 1
为什么找不到Hello呢?另外如果能够找到类的话,不知这样写能否正确运行Hello这个程序呢?如果不能,那位高手能否写个程序来完成这个功能?
感激不尽!

解决方案 »

  1.   

    编译能通过我这里运行的结果:<ERROR>
    </ERROR>
    Process exitValue: 0但是Hello不知道有没有执行,很奇怪
    反正看不到Hello的执行结果
      

  2.   

    是可以执行的,但是你要运行两次第一次运行找不到Hello是因为需要编译第二次再运行java Judge就可以了
      

  3.   

    如果只要编译的那条语句在我这里Judge.java程序可以运行,但是加上proc=rt.exec("java Hello");这条语句之后就找不到Hello了.不知"masse(当午)"所说的运行两次是指哪个程序?我用的是Jcreator,先编译Judge.java,然后再运行就是这样子的.另外2楼说的"但是Hello不知道有没有执行,很奇怪 反正看不到Hello的执行结果"又怎么解决呢?
      

  4.   

    //把你的helloworld设置能暂停的,不然运行之后dos直接退出了
    //到控制台下运行,我这边用eclipse运行好像不行
    import java.io.*;public class Judge {
        public static void main(String args[]) {
            String srcDir = "D:\\Work\\Java\\Test\\src\\_previous";
            try {
                Runtime rt = Runtime.getRuntime();
                Process proc;
                proc = rt.exec("cmd /c javac "+srcDir+"\\HelloWorld.java");
                Thread.sleep(2000);//编译没那么快的,等待生成class文件
                proc = rt.exec("cmd /c start java _previous.HelloWorld");
                InputStream stderr = proc.getErrorStream();
                InputStreamReader isr = new InputStreamReader(stderr);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                System.out.println("<ERROR>");
                while ((line = br.readLine()) != null)
                    System.out.println(line);
                System.out.println("</ERROR>");
                int exitVal = proc.waitFor();
                System.out.println("Process exitValue: " + exitVal);
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }
    }
      

  5.   

    proc = rt.exec("cmd /c start java _previous.HelloWorld");这句话恐怕不行,因为如果不在D:\\Work\\Java\\Test\\src 目录下执行java _previous.HelloWorld 会报错的