2013-06-05 3 views
1

Итак, я немного искал, и Google и поиск StackOverflow ничего не объясняют в связи с этим вопросом. Я думал, что нашел что-то минуту назад, но он просто хотел узнать, как открыть .exe с Java.Как сохранить и открыть Java-программу с помощью Java-программы?

В любом случае, поскольку название говорит, что я хотел бы знать, как скомпилировать и сохранить файл Java из программы Java, а затем открыть тот же самый файл Java, который я только что сохранил.

Так что любая помощь с этим будет очень благодарна.

EDIT: Хорошо, что я говорю о том, чтобы выполнить файл Java.

Идея, которую я имею, заключается в использовании генетического алгоритма в качестве основы и целого обучения, которое я должен выполнить. Программируйте программу, которая может создавать программы в заданных параметрах. Затем оно запустится и продолжит цикл совершенствования. В основном сам улучшающий код. На данный момент у меня есть базовый код генетического алгоритма, и я просто пытаюсь узнать, как он работает, поскольку это был учебник, который я нашел. Да, я знаю, что это может быть невозможно, но мне нравится вызов, и это дает мне цель и, на мой взгляд, вескую причину, чтобы изучить Java, как я пытался раньше, но я не очень далеко.

В любом случае, извините за путаницу.

Edit2: Так что это в основном код используется он был немного изменен и возился с, хотя в тот момент, чтобы увидеть, что я могу заставить его сделать уже: http://www.theprojectspot.com/tutorial-post/creating-a-genetic-algorithm-for-beginners/3

+0

Можете ли вы, пожалуйста, дайте нам знать, что вы пробовали до сих пор? Это поможет всем вам помочь. –

+0

Что вы подразумеваете под ** open .exe **? Вы действительно имеете в виду ** выполнить .exe **? И файл Java похож на любой другой файл, так что в чем проблема, с которой вы столкнулись? – m0skit0

+1

Вы можете использовать 'ant' для сборки файла (jar, ..), а затем запускать программу с помощью' Runtime.getRuntime(). Exec (cmd); ' –

ответ

0

Вы можете использовать http://commons.apache.org/proper/commons-exec/ для запуска процессов от Java-кода. Вы должны называть те же вещи, что и в командной строке. (javac -cp..., а затем java -cp.. someclass)

+0

Я думаю, вам лучше использовать Runtime.getRuntime(). exec ("javac -cp ... someclass") или любой из его вариант вместо этого, потому что он напрямую включен в JDK. –

+0

Пожалуйста, позвольте мне не согласиться :) Просто потому, что что-то в JDK не означает, что это лучшее решение ... Apache Commons - одна из лучших доступных libs, и этот был специально разработан для выполнения процессов с Java, поэтому он предлагает гораздо больше, чем Runtime.exec(). –

+0

Ну, я не имею в виду, что вам всегда нужно использовать вещи из JDK, но я думаю, что хорошо не добавлять новые зависимости, когда это не нужно (как кажется IMHO). Если в этом случае окажется, что у вас есть интерес использовать commons-exec, то почему бы и нет? –

1

После правки, я понял, что ваш вопрос:

Как я могу написать Java программу, которая достаточно умен, чтобы создать более умные программы Java?

Это сложная задача. Если у вас есть решение для искусственного интеллекта, которое необходимо для этого, вам необходимо техническое решение о том, как динамически создавать новый класс во время выполнения. Я могу предложить два варианта.

  1. Используйте java compiler API
  2. Или использовать javassist библиотеку.
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 
+0

Спасибо, что этот код помог мне получить половину того, что я хочу сделать в кратчайшие сроки. – Powermaniac

Смежные вопросы