2012-04-15 13 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はありません。

JREの代わりにJDKライブラリへのパスを手動で設定しなければならない数台のコンピュータでしか動作しないプログラムは望ましくありません。これを念頭において、この問題の回避策はありますか?

可能であれば、クロスプラットフォームで作業したいと思います。

答えて

4

JREにはコンパイラが含まれておらず、JDKには対応していません。 Javaコンパイラを使用する場合は、JDKを使用してプログラムを実行する必要があります。

実行可能なJavaコードを実行時に作成する方法は他にもありますが、さまざまなバイトコードアセンブラがあり、コンパイラを使用せずにコードを動的に構築できます。 ASMは激しく揺れ動くものです。 Apache BCELが別です。

関連する問題