熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java進階:在SE6中調用編譯器的兩種方法[1]

2022-06-13   來源: Java核心技術 

  在很多Java應用中需要在程序中調用Java編譯器來編譯和運行但在早期的版本中(Java SE及以前版本)中只能通過toolsjar中的comsuntoolsjavac包來調用Java編譯器但由於toolsjar不是標准的Java庫在使用時必須要設置這個jar的路徑而在Java SE中為我們提供了標准的包來操作Java編譯器這就是javaxtools包使用這個包我們可以不用將jar文件路徑添加到 classpath中了

  一使用JavaCompiler接口來編譯Java源程序

  使用Java API來編譯Java源程序有很多方法現在讓我們來看一種最簡單的方法通過JavaCompiler進行編譯

  我們可以通過ToolProvider類的靜態方法getSystemJavaCompiler來得到一個JavaCompiler接口的實例

  JavaCompiler compiler = ToolProvidergetSystemJavaCompiler();

  JavaCompiler中最核心的方法是run通過這個方法可以編譯java源程序這個方法有個固定參數和個可變參數(可變參數是從Jave SE開始提供的一個新的參數類型用type… argu表示)個參數分別用來為java編譯器提供參數得到Java編譯器的輸出信息以及接收編譯器的錯誤信息後面的可變參數可以傳入一個或多個Java源程序文件如果run編譯成功返回

  int run(InputStream in OutputStream out OutputStream err String arguments)

  如果前個參數傳入的是null那麼run方法將以標准的輸入輸出代替即SysteminSystemout和Systemerr如果我們要編譯一個testjava文件並將使用標准輸入輸出run的使用方法如下

  int results = toolrun(null null null testjava);

  下面是使用JavaCompiler的完整代碼

  import javaio*;
  import javaxtools*;
  public class test_compilerapi
  {
  public static void main(String args[]) throws IOException
  {
  JavaCompiler compiler = ToolProvidergetSystemJavaCompiler();
  int results = compilerrun(null null null testjava);
  Systemoutprintln((results == )?編譯成功:編譯失敗);
  // 在程序中運行test
  Runtime run = RuntimegetRuntime();
  Process p = runexec(java test);
  BufferedInputStream in = new BufferedInputStream(pgetInputStream());
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String s;
  while ((s = brreadLine()) != null)
  Systemoutprintln(s);
  }
  }
  public class test
  {
  public static void main(String[] args) throws Exception
  {
  Systemoutprintln(JavaCompiler測試成功!);
  }
  }

  編譯成功的輸出結果

  編譯成功

  JavaCompiler測試成功

  編譯失敗的輸出結果

  testjava:: 找不到符號

  符號 方法 printlnln(javalangString)

  位置 類 javaioPrintStream

  Systemoutprintlnln(JavaCompiler測試成功!);
  ^

   錯誤

  編譯失敗

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27241.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.