public boolean makeJavaFile()
{
    try {
        Runtime rt = Runtime.getRuntime();
        Process ps = rt.exec("cmd /c javac test\\Main.java");
        ps.waitFor();
                 ps = rt.exec("cmd /c java test\\Main");
      return true;
    }
           catch (Exception e) {
           return false;
    }
在当前目录有一个test文件夹,在test文件夹里面有一个Main.java,在调用这个函数的时候来编译和运行它,但是没有反应,连生成Main.class文件都不行啊。有什么办法呢??

解决方案 »

  1.   

    class TestJavac {
    public static void main(String args[]){
    try{
    Runtime rt = Runtime.getRuntime();
    String srcFile ="C:/Test/HelloWorld.java";
    String command = "javac ";
    rt.exec(command+srcFile);
    System.out.println("Compile File Success!");
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    }
      

  2.   

    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
      

  3.   

    Process ps = rt.exec("javac test\\Main.java");
    这是用外部命令来运行java程序和运行word,excel没什么区别
    把jdk/bin目录加到系统的path中即可
    你要先编译("javac test\\Main.java");,再执行("java test\\Main.java");,
      

  4.   

    javac,当前目录无所谓的,
    java,当前目录只能是没有package的目录,比如类A有package a,那么只能在a上一级目录进行java a/A,在a目录下java A是不行的
      

  5.   

    多谢各位啊,我刚刚也做到了,现在到了编译JAR的问题了,如果我在上一级目录编译JAR,那么这个JAR打包了之后就会多了一个文件夹来放*.class文件,有什么方法可以在编译JAR的时候,无论.class文件在哪个目录都好,在打包之后.class文件要放在这个JAR的根目录里呢。一会马上给分。
      

  6.   

    看了LZ的问题,觉得挺有趣的。。自己也写了个代码如下:class ComdJava {

    public static void main(String args[]){

    try{
    Runtime rt = Runtime.getRuntime();

    rt.exec("javac "+args[0]);

    String ajava = args[0].substring(0,args[0].indexOf("."));

                               rt.exec("java "+ajava);
                         
    System.out.println("Compile File Success!");
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    }不过执行java命令时没有反应。。不知怎么回事望高手指点下~~
    (believefym的方法我没有去试。。原因:想不出好的代码实现)
      

  7.   

    有什么方法可以在编译JAR的时候,无论.class文件在哪个目录都好,在打包之后.class文件要放在这个JAR的根目录里呢
    -------------------
    楼主怎么会有这样的需求呢?
    目录代表package,打包的时候顺便把package也打进去很正常啊不过执行java命令时没有反应。。不知怎么回事
    -------------------
    javac之后,Thread.sleep(someSeconds)
    编译没那么快生成class,当你后面的代码执行java的时候class还没生成
      

  8.   

    。加了也不行。命令行上只显示ComdJava中的System.out对象而Hello.java中的System.out则显示不出有哪位实现了的发表下看法~~谢谢了
      

  9.   

    你是为了接管其他class文件的System.out?那你需要pipe到自身的System.out才可以达到效果。
      

  10.   

    可能我没说清楚其实就是要实现楼主表述的功能把代码贴出来就清楚了ComdJava.javaclass ComdJava {

    public static void main(String args[]){

    try{
    Runtime rt = Runtime.getRuntime();

    rt.exec("javac "+args[0]);

    String ajava = args[0].substring(0,args[0].indexOf("."));
                             
                            Thread.sleep(8000);

                            rt.exec("java "+ajava);
                         
    System.out.println("Compile File Success!");
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    }
    Hello.javapublic class Hello{
       public static void main(String args[]){
           System.out.println("Hello World!");
       }
    }两个文件在同一package下
      

  11.   

    两个文件在同一package下
    ----------------
    同一package跟同一目录不是一回事,看你的代码应该事同一目录吧
      

  12.   

    呵。。基础没打好。。不好意思恩。。是在同一个目录下能指出为什么不能输出"Hello World"的原因吗~?