1

所以我做了一些搜索,谷歌和 StackOverflow 搜索没有提出关于这个问题的任何内容。我以为我刚才找到了一些东西,但它只是想知道如何用 Java 打开一个 .exe。

无论如何,正如标题所说,我想知道如何从 Java 程序中编译和保存 Java 文件,然后打开我刚刚保存的同一个 Java 文件。

所以是的,对此的任何帮助将不胜感激。

编辑:好的,我要说的是让 Java 文件执行。

我的想法是使用遗传算法作为基础,我还需要做大量的学习。编写一个可以在给定参数内创建程序的程序。然后它会自行启动并继续自我改进的循环。基本上是自我改进的代码。目前我有遗传算法的基本代码,我只是想了解它是如何工作的,因为它是我找到的一个教程。是的,我知道这可能是不可能的,但我喜欢这个挑战,它给了我一个目标,并且我认为这是一个有趣的理由来学习 Java,就像我以前尝试过的那样,但我并没有走得太远。

无论如何,对不起任何混乱。

Edit2:所以这基本上是正在使用的代码,它已经被稍微修改和弄乱了,但现在看看我可以让它做什么:http ://www.theprojectspot.com/tutorial-post/creating-初学者的遗传算法/ 3

4

4 回答 4

2

您可以尝试查看http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html

于 2013-06-05T08:10:10.327 回答
1

编辑后,我了解到您的问题是:

如何编写一个足够聪明的 Java 程序来创建更聪明的 Java 程序?

这将是一项艰巨的任务。如果您有为此所需的人工智能解决方案,那么您需要一个技术解决方案来解决如何在运行时动态创建新类。我可以为此提出两种选择。

  1. 使用java 编译器 API
  2. 或者使用javassist库。
于 2013-06-05T08:44:09.230 回答
0

您可以使用http://commons.apache.org/proper/commons-exec/从 Java 代码启动进程。您应该调用与形成命令行相同的东西。(javac -cp...然后java -cp.. someclass

于 2013-06-05T08:02:06.527 回答
0
import java.io.*;

public class MyProg 
{
    public static void main(String[] args) 
        throws IOException, InterruptedException
    {
        String fname = "Prog1.java";
        BufferedWriter bw;

        try{
            bw = new BufferedWriter(
                    new FileWriter(fname)
            );
        } 
        catch (IOException e) {
            System.out.println("Cannot open " + fname + "!");
            return;
        }


        final String NL = System.getProperty("line.separator");

        bw.write("public class Prog1{" + NL
                + "\tpublic static void main(String[] args) {" + NL
                + "\t\tSystem.out.println(\"hello world\");" + NL
                + "\t}" + NL
                + "}" + NL
        );
        bw.close();

        BufferedReader br;
        try {
            br = new BufferedReader(
                    new FileReader(fname)
            );
        }
        catch (FileNotFoundException e) {
            System.out.println(fname + " not found!");
            return;
        }

        String line;
        while( (line = br.readLine()) != null )
        {
            System.out.println(line);
        }





        Process p1 = new ProcessBuilder(
            "javac", "Prog1.java"
        ).start();

        int error = p1.waitFor();
        System.out.println("p1: " + error);

        /*
        Process p2 = new ProcessBuilder(
            "java", "-cp . Prog1"
        ).start();

        error = p2.waitFor();

        System.out.println("p2: " + error);
        */

        FileInputStream fin;
        try {
            fin = new FileInputStream(fname);
        }
        catch (FileNotFoundException e) {
            System.out.println(fname + " not found!");
            return;
        }

        int abyte;
        while((abyte = fin.read()) != -1)
        {
            System.out.println(abyte);
        }

        fin.close();


    }
} 


--output:--
public class Prog1{
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}
p1: 0
112
117
98
108
105
99
...
...
125
10
于 2013-06-05T09:07:11.003 回答