2012-03-08 13 views
2

私は別のクラスからクラスをコンパイルしたいが、私が使ったメソッドはすべてNullPointerExceptionをスローする。 http://www.javabeat.net/articles/73-the-java-60-compiler-api-1.htmlJavaCompiler、StandardJavaFileManagerがNPEを投げる

から

File fRun = new File(fileToRun);  
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
// NPE IN NEXT LINE 
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); 
Iterable<? extends JavaFileObject> compUnits = fileManager.getJavaFileObjects(fRun); 
compiler.getTask(null, fileManager, null, null, null, compUnits).call();    
fileManager.close(); 

または

public static void main(String[] args) { 
    String fileToCompile = "test" + java.io.File.separator + "MyClass.java"; 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    // NPE IN NEXT LINE 
    int compilationResult = compiler.run(null, null, null, fileToCompile); 
    if (compilationResult == 0) { 
     System.out.println("Compilation is successful"); 
    } else { 
     System.out.println("Compilation Failed"); 
    } 
} 

は、私は、Eclipseからプログラムを起動します。

は、ここでは、コードです。

Wheresは間違いですか?

答えて

2

ほとんどの場合、getSystemJavaCompiler()は、実行しているプラ​​ットフォームにJavaコンパイラがないため、nullを返します。 JDKまたはJREでプログラムを実行していますか?

+0

はソースATMにアクセスできないが、JRE 1.7で実行していると思う – ctekk

関連する問題