2014-05-12 69 views
-1

我新的編程,我想編譯和運行一個外部的java文件,看起來像這樣:如何正確運行和編譯外部java源文件?

import java.util.Scanner; 
public class Test{ 
    public static int spr1; 
    private int spr2; 
    public static void main(String[]args){ 
     System.out.println("Hello world"); 
      Scanner sc = new Scanner(System.in); 
      System.out.println(sc.nextInt()); 
    } 
} 

有一個簡單的方法(例如,使用的ProcessBuilder)來運行該程序,並打印整數從輸入?

編輯:也許我不夠清楚:我想在java程序中運行一個EXTERNAL java程序(看起來像這樣)。我目前正在製作一個Java編輯器(使用Netbeans),它必須編譯並運行一個Java程序。我被來自editorWindow的用戶輸入卡住了。

編輯2: 我找到了解決方案。這很簡單:

ProcessBuilder builderExecute = new ProcessBuilder("java", "Test"); 
builderExecute.redirectInput(Redirect.INHERIT); 
Process p = builderExecute.start(); 
String line = ""; 
while ((line = input.readLine()) != null) { 
     System.out.println(line); 
+4

'javac Test.java',然後是'java Test'。 (當然,在命令提示符窗口中)。 –

+1

在熱舔評論上詳述一下。用java編譯器編譯代碼,然後按照你想要的方式執行代碼。如果你想從另一個Java進程啓動這個代碼,或者如果你只是想執行它,使用一個ProcessBuilder/Process應該工作得很好。 –

+1

你也可以使用IDE來學習語言(Eclipse,Netbeans等)。他們有編譯工具,對你來說更容易 –

回答

0

在另一個Java程序中執行Java程序,我希望這是你所要求的。

您可以使用Process和Runtime類來實現此目的。

import java.io.*; 
public class TestExec { 
    public static void main(String[] args) { 
     try { 
      Runtime.getRuntime().exec("javac Test.java"); 
      Process p=Runtime.getRuntime().exec("java Test"); 
      BufferedReader in = new BufferedReader( 
           new InputStreamReader(p.getInputStream())); 
      String line = null; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

閱讀本articlethis,也可以閱讀幫助(javac -help)。

更新: 以編程方式使用ProcessBuilder編譯java文件。

/** 
* 
* @param path 
*/ 
public static void compile(final String path) { 
    try { 
     final Process sqlProcess = getSqlProcess(path); 
       sqlProcess.waitFor(); 
       if (sqlProcess != null && sqlProcess.exitValue() == 0) { 
        // Done 
        System.out.println("Compilation success"); 
       } else { 
        System.out.println("Compilation fail"); 
       } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private static Process getSqlProcess(String path) throws Exception { 
    if (System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0) { 
     path = path.replaceAll("\\s", "\\\\ "); 
     String[] executeCmd = new String[]{"/bin/sh", "-c", "javac", path}; 
     return Runtime.getRuntime().exec(executeCmd); 
    } else { 
     path = path.replace("\\", "\\\\"); 
     String[] executeCmd = new String[]{"/bin/sh", "-c", "javac", path}; 
     return new ProcessBuilder(executeCmd).start(); 
    } 
} 
相關問題