2011-09-30 80 views
0

我正在使用此代碼在運行時編譯Java文件。首先,這裏是我的目錄樹(在Eclipse中)。Java編譯器API空指針異常

+---- src 
+----- package 
+------ Compile.java 
+ 
+ 
+---- temp 
+----- anotherpackage 
+------ Temp.java (file to compile) 

這裏是我的代碼,我得到NullPointerException(我已經嘗試使用JDK作爲Eclipse中的標準虛擬機)。

public static void compile(URI path, InputStream is, OutputStream os, OutputStream err) throws IOException { 
    SimpleJavaFileObject source = new CustomJavaFileObject(path, Kind.SOURCE); 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    JavaCompiler.CompilationTask task = compiler.getTask(new PrintWriter(err), null, null, null, null, Arrays.asList(source)); 
    task.call(); 
} 

這裏是CustonJavaFileObject:

class CustomJavaFileObject extends SimpleJavaFileObject { 
    protected CustomJavaFileObject(URI uri, Kind kind) { 
     super(uri, kind); 
    } 
} 

我在做什麼錯?

編輯:

我沒有在我的道路的JDK(我不能添加的話)

這裏是我的堆棧跟蹤:

java.lang.NullPointerException 
    at package.Compiler.compile(Compiler.java:20) 
    at package.Interactive.main(Interactive.java:19) 
+0

您應該包含堆棧跟蹤。 –

+0

編譯器可能在您的系統中不可用。檢查ToolProvider API,它會說如果沒有提供編譯器,getSystemJavaCompiler將返回null。 –

+0

@HovercraftFullOfEels JDK不在我的PATH中,我不能添加它,但即使當我將JDK用作我的StandardVM時,它仍然不起作用。 – LanguagesNamedAfterCofee

回答

0
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

導致問題。將JRE指向JDK內部,與jdk不同,jre不提供任何工具。

+0

@ yijiang該怎麼辦? –

+1

@ yi-jiang JDK中如何指出JRE? –