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?

3
  • 1
    Which line is Main.java:24? Is ToolProvider.getSystemJavaCompiler() returning null? Commented Oct 5, 2011 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? Commented Oct 5, 2011 at 20:40
  • @AndrewThompson Can you take a look on this question? stackoverflow.com/questions/36583278/… Commented Apr 14, 2016 at 23:00

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

Comments

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.