5

別のスタック オーバーフロー スレッドからこの Java コードを取得しました

import java.io.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class Main {
  public static void main(String[] args) throws IOException{
    String source = " public class Test { public static void main(String args[]) {     System.out.println(\"hello\"); } }";

    // Save source in .java file.
    File root = new File("C:\\java\\");
    root.mkdir();
    File sourceFile = new File(root, "\\Test.java");
    Writer writer = new FileWriter(sourceFile);
    writer.write(source);
    writer.close();

    // Compile source file.
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, sourceFile.getPath());
  }
}

しかし、私はこのように NullPointerException を取得し続けます

Exception in thread "main" java.lang.NullPointerException
    at com.zove.compiler.Main.main(Main.java:24)

コンパイルはしますが、実行時に例外をスローします。私は何を間違っていますか?

4

2 に答える 2

5

あなたのコードは、JDK を使用して実行すると問題なく動作します。JREを使用して実行すると、あなたのcompiler.run(...)ようにNullPointerExceptionが発生します。

したがって、コードを実行するために Java ランタイムを切り替えるだけでよいと思います。

于 2011-10-05T18:33:48.267 に答える
3

JRE を使用して Java プログラムをコンパイルすることはできません。

したがって、コンパイルが可能になるように 、 JDKをパスに含める必要があります。

コマンドラインで実行すると、プログラムを実行することさえせずにあなたの場合:
javacあなたは得るでしょう

「javac」は内部コマンドまたは外部コマンドとして認識されません

これが、ヌル ポインター例外が発生する理由です。

于 2011-10-05T20:17:06.313 に答える