2011-10-05 3 views
5

나는 다른 스택 오버플로 스레드JavaCompiler로 프로그래밍 방식으로 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()); 
    } 
} 

에서이 자바 코드를 가지고 그러나 나는 컴파일을 수행이

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

그것은 같은 NullPointerException이 점점 계속하지만, 런타임시 예외가 발생합니다. 내가 뭘 잘못하고 있니?

+1

어떤 행이'Main.java : 24'입니까? 'ToolProvider.getSystemJavaCompiler()'는 null을 돌려 주나요? – mpartel

+0

코드 길이가 21 줄에 불과하므로 NPE가 24 행에서 어떻게 발생하는지 알 수 없습니다. 도움을 요청하려는 사람들의 시간을 낭비하려는 의도가 있습니까? 어떤 코드 ** ** 실제로 사용하고 있습니까? –

+0

@AndrewThompson이 질문에 대해 살펴볼 수 있습니까? http://stackoverflow.com/questions/36583278/how-can-compile-i-java-file-in-jsp – sony

답변

5

JDK를 사용하여 코드를 실행하면 코드가 올바르게 작동합니다. JRE를 사용하여 실행하면 compiler.run(...)과 같은 NullPointerException이 발생합니다.

따라서 코드 실행을 위해 Java 런타임 만 전환하면된다고 가정합니다.

+0

+1 동일한 결과가 나타납니다. – sealz

3

JRE를 사용하여 Java 프로그램을 컴파일 할 수 없습니다.

그래서 컴파일이 가능하도록 경로에 JDK이 있어야합니다.
javac 당신이

'javac의이'내부 또는 외부 명령으로 인식되지 않습니다

이를 얻을 것입니다 : 당신이 명령 줄에서 실행하는 경우에도 프로그램을 실행하지 않고 귀하의 경우에는

널 포인터 예외를 얻는 이유입니다.

관련 문제