2012-04-15 102 views
2

我發現這個代碼:從java程序中編譯.java文件?

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

if(compiler.run(null, null, null, fileName) != 0) { 
    System.err.println("Could not compile."); 
    System.exit(0); 
} 

然而,這會返回一個NullPointerException

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at net.foxycorndog.foxy.compiler.Compiler.compile(Compiler.java:25) 
at net.foxycorndog.foxy.compiler.Parser.parse(Parser.java:41) 
at net.foxycorndog.foxy.Foxy$ActionHandler.actionPerformed(Foxy.java:99) 

我讀了JRE並不包括在Java程序中編寫的能力,但JDK一樣。

我不想要一個僅適用於幾臺必須手動設置JDK庫而不是JRE路徑的計算機的程序。考慮到這一點,有沒有解決這個問題的方法?

如果可能的話,我也希望它能在跨平臺上工作。

回答

4

對於JRE不包含編譯器和JDK的事實,沒有解決方法。如果你想使用Java編譯器,那麼你需要用JDK運行你的程序。

然而,在運行時還有其他方法可以創建可執行的Java代碼;有各種各樣的字節碼彙編程序,它們可讓您在不使用編譯器的情況下動態構建代碼。 ASM是一個堅硬的岩石; Apache BCEL是另一個。