MyClass.java:
package test;
public class MyClass {
public void myMethod(){
System.out.println("My Method Called");
}
}
Listing for SimpleCompileTest.java that compiles the MyClass.java file.
SimpleCompileTest.java:
package test;
import javax.tools.*;
public class SimpleCompileTest {
public static void main(String[] args) {
String fileToCompile = "test" + java.io.File.separator +"MyClass.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}
}
I am executing the SimpleCompileTest class and getting a NullPointerException. The ToolProvider.getSystemJavaCompiler() is returning null. Can someone tell me what is wrong with the code
I suspect you're running into this problem - running the code with a JRE instead of a JDK.
When you run
SimpleCompileTest
, try explicitly specifying the version of java.exe you're using as the one in your JDK directory.I was having the same problem
was returning null. Even after using
was returning null.
However the issue was simple as this code is in the
Tools.jar
found inJava\jdk1.8.0_31\lib
if you are using JDK. what i did was to go toproject-->properties-->Java Build Path-->order and export-->
and movedtool.jar
to the top of other JRE and projects. This helped me get rid of null hope this help you as well.Happy compiling...:-)I got the same error. Maybe I am too late to answer this question, but I share my own experiences, it might help someone else facing the same issue in the future. I was playing around with the source code at Compile Java Files At Runtime.
I was getting
java.lang.NullPointerException
as it is mentioned. I printed out the Java home directory withSystem.out.println(System.getProperty("java.home"));
, and noticed my Eclipse was pointing to "C:\Program Files\Java\jre7
" even after I changed my preferences to use JDK1.7 instead of JRE1.7.I found a workaround by forcing the usage of JDK1.7 by setting system property like this:
Then I compiled my program and did not get any
NullPointerException
.Probably you have a JRE instead of JDK installed. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477844
SUPPLEMENT: The answer above is to set the java.home system property within the program. That works for me too, but it's not a very general solution, since you've hard-coded for one jdk version. The alternative that I'm using now is to give the full path to "java" on the command line when I run the program. Such as (consistent with examples above):
Giving the full path to the jdk version means that's the version that's running the program, so that's the one that will be fetched with ToolProvider.getSystemJavaCompiler();
Its working with Java application by expicitily including the tools.jar but for web application not working. Throwing Nullpointer