源程序出自http://www.chinajavaworld.net,具体位置我也不记的了,有兴赽的可以去看看。

解决方案 »

  1.   

    你想讨论的是什么?这程序被你弄得乱糟糟的,呵呵String[] args =
               new String[] {"-d", System.getProperty("user.dir"), filename};这里不用file.getAbsolutePath()而使用filename是可以的么?我做过一个简单的动态生成运行java程序的东东,记得好像要写全路径才行,要不可能是大家环境不一样也说不定。你贴的这段代码能不能不能运行的?不太清楚你为什么要改,改过以后还没有原来那段代码好,呵呵
      

  2.   

    哈哈,的确是这样的。我发个原版的,不过就没讨论的价值了,呵呵。不过可以给人灵感.
    就写全路径问题的确很让人烦,如果写成实际路径后,软件就提上可移植的,以上程序的本来用意是实时的生成一段JAVA代码来运行,而我认为实时生的代码太过于死板,没有一定的灵活性,所以我屏蔽了那一段死代码,而使用一个java文件,该文件可以是程序实际生成的,也可以是现成的,不过路径问题一直没有解决,user.dir我设置成我当前的包了,可还是指向我开发程序的安装路径,我想这不会是我的IDE有问题吧,这是第一次尝试所以不大清楚只好贴上来了。
    上面的程序是可以运行的。
      

  3.   

    以下是原来的程序,/**/注释部份就是我想调用的一个测试文件
    -----------------------------------------------------------------
    package com.yadosoft.java;import java.io.File;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.lang.reflect.Method;
    import com.sun.tools.javac.Main;/**
    * 动态执行JAVA示例
    * Create on 2003/04/21
    * 调用方法: java ExecJava 要执行的JAVA语句,例如:java ExecJava System.out.println("123");
    * @author memphis.guo(email:[email protected])
    */public class ExecJava
    {
        public static void runJava(String code)
        {
           File file;
           Main javac = new Main();
           String classname = "";
           String filename = "";
           try
           {
             /*这里->
              *file = new File("d:\\MyProject\\TEST\\com\\yadosoft\\main\\Test.java");
             System.out.println(file.getAbsolutePath());*/
             //在当前目录下产生一个临时JAVA文件
             file = File.createTempFile(
                                         "JavaRuntime",
                                         ".java",
                                         new File(System.getProperty("user.dir")));
             //当程序离开时删除这个临时文件
             file.deleteOnExit();
     
             filename = file.getName();
             classname = getClassName(filename);
             System.out.println("classname="+classname);
             //写临时文件
             PrintWriter out = new PrintWriter(new FileOutputStream(file));
             out.println("package com.yadosoft.main;\r\n");
             out.println("import javax.swing.JFrame;\r\n");
             out.println("public class " + classname + " extends javax.swing.JFrame\r\n{");
             out.println("\tpublic static void main(String argc[])\r\n\t{");
             out.println("\t\tnew " + classname + "().show();\r\n");
             out.println("\t}\r\n}");
             out.flush();
             out.close();         //编译执行临时文件
             System.out.println("user.dir="+System.getProperty("user.dir"));
             String[] args =
               new String[] {"-d", System.getProperty("user.dir"), filename};
             int status = javac.compile(args);
             new File(file.getParent(), classname + ".class").deleteOnExit();
             Class cls = Class.forName("com.yadosoft.main."+classname);
             Method main = cls.getMethod("main", new Class[] { String[].class });
             main.invoke(null, new Object[] { new String[0] });
           }
           catch (Exception e)
           {
             e.printStackTrace();
           }
        }     /**根据一个java源文件名获得类名*/
         private static String getClassName(String filename)
         {
             return filename.substring(0, filename.lastIndexOf("."));
         }    public static void main(String args[])
        {
            runJava(args[0]);
        }
    }
      

  4.   

    TO bluesmile979(笑着):"这里不用file.getAbsolutePath()而使用filename是可以的么",getAbsolutePath()是得到文件的全路径,而filename只是一个文件名而以没有全路径