2012-04-15 3 views
2

는이 코드 발견 :Java 프로그램 내에서 .java 파일을 컴파일 하시겠습니까?

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

if(compiler.run(null, null, null, fileName) != 0) { 
    System.err.println("Could not compile."); 
    System.exit(0); 
} 

그러나,이 내가 JRE는 자바 프로그램 내에서 컴파일 할 수있는 기능을 포함하지 않음을 읽을 수는 NullPointerException

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at net.foxycorndog.foxy.compiler.Compiler.compile(Compiler.java:25) 
at net.foxycorndog.foxy.compiler.Parser.parse(Parser.java:41) 
at net.foxycorndog.foxy.Foxy$ActionHandler.actionPerformed(Foxy.java:99) 

을 반환합니다,하지만 JDK는 않습니다.

JRE 대신 JDK 라이브러리의 경로를 수동으로 설정해야하는 몇 대의 컴퓨터에서만 작동하는 프로그램을 원하지 않습니다. 이를 염두에두고이 문제에 대한 해결 방법이 있습니까?

가능한 경우 교차 플랫폼을 통해 작업하고 싶습니다.

답변

4

JRE에는 컴파일러가 포함되어 있지 않으며 JDK에는없는 해결 방법은 없습니다. Java 컴파일러를 사용하려면 JDK를 사용하여 프로그램을 실행해야합니다.

실행 가능한 Java 코드를 런타임에 만들 수있는 다른 방법이 있습니다. 다양한 바이트 코드 어셈블러을 사용하면 컴파일러를 사용하지 않고 코드를 동적으로 작성할 수 있습니다. ASM은 열심히 바위입니다; Apache BCEL은 또 하나입니다.

관련 문제