5

I got this Java code from another Stack Overflow thread

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

But I keep getting a NullPointerException like this

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

It does compile but it throws the exception at runtime. What am I doing wrong?

user969931
  • 96
  • 5
  • 1
    Which line is `Main.java:24`? Is `ToolProvider.getSystemJavaCompiler()` returning null? – mpartel Oct 05 '11 at 18:23
  • Given the code is only 21 lines long, I cannot see how the NPE could occur at line 24. Is it your intention to waste the time of people trying to help you? What code are you **actually** using? – Andrew Thompson Oct 05 '11 at 20:40
  • @AndrewThompson Can you take a look on this question? http://stackoverflow.com/questions/36583278/how-can-compile-i-java-file-in-jsp – sony Apr 14 '16 at 23:00

2 Answers2

5

Your code works fine for me when I execute it using the JDK. If I execute it using the JRE I get a NullPointerException on compiler.run(...) like you.

Therefore I assume that you only have to switch the Java runtime for executing your code.

Robert
  • 39,162
  • 17
  • 99
  • 152
3

Well you can't compile java programs using the JRE.

So you have to have the JDK in your path so that the compilation be possible.

In your case without even running your program if you run in command line:
javac you would get

'javac' is not recognized as an internal or external command

This is why you get the null pointer exception.

Cratylus
  • 52,998
  • 69
  • 209
  • 339