0

このコードを使用して、実行時に Java ファイルをコンパイルしています。まず、これが私のディレクトリ ツリーです (Eclipse の場合)。

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

NullPointerException を取得しているコードを次に示します (Eclipse で標準 VM として JDK を使用しようとしました)。

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);
    }
}

私は何を間違っていますか?

編集:

PATH に JDK がありません (追加できません)

ここに私のスタックトレースがあります:

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

1 に答える 1

0
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

問題を引き起こします。jdk とは異なり、jre はツールを提供しないため、JRE が JDK 内にあるように指定します。

于 2011-10-21T07:07:28.777 に答える