Pergunta

MinhaClasse.java:

package test;
public class MyClass {
    public void myMethod(){
        System.out.println("My Method Called");
    }
}

Listagem de SimpleCompileTest.java que compila o arquivo MyClass.java.

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

Estou executando a classe SimpleCompileTest e obtendo um NullPointerException.O ToolProvider.getSystemJavaCompiler() está retornando nulo.Alguém pode me dizer o que há de errado com o código

Foi útil?

Solução

Eu suspeito que você está se deparando este problema - executando o código com um JRE em vez de um JDK.

Quando você corre SimpleCompileTest, tentar explicitamente especificando a versão do java.exe que você está usando como aquela em seu diretório JDK.

Outras dicas

Eu recebi o mesmo erro. Talvez eu esteja tarde demais para responder a essa pergunta, mas compartilho minhas próprias experiências, isso pode ajudar alguém a enfrentar o mesmo problema no futuro. Eu estava brincando com o código -fonte em Compilar arquivos Java em tempo de execução.

eu estava conseguindo java.lang.NullPointerException como é mencionado. Imprimi o diretório inicial do Java com System.out.println(System.getProperty("java.home"));, e notei que meu eclipse estava apontando para "C:\Program Files\Java\jre7"Mesmo depois de mudar minhas preferências para usar o JDK1.7 em vez de JRE1.7.

Encontrei uma solução alternativa forçando o uso do JDK1.7 definindo a propriedade do sistema como esta:

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");

Então eu compilei meu programa e não recebi nenhum NullPointerException.

Provavelmente você tem um JRE em vez de JDK instalado. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477844

Eu estava tendo o mesmo problema

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

estava retornando nulo. Mesmo depois de usar

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_31");

estava retornando nulo.

No entanto, a questão era simples, pois este código está no Tools.jar encontrado em Java\jdk1.8.0_31\lib Se você estiver usando o JDK. O que eu fiz foi ir para project-->properties-->Java Build Path-->order and export--> e movido tool.jar ao topo de outros JRE e projetos. Isso me ajudou a me livrar de NULL, espero que isso também ajude. Feliz compilação ... :-)

Seu trabalho com o aplicativo Java, incluindo as ferramentas. Jogando nullpointer

Suplemento: A resposta acima é definir a propriedade Java.Home System dentro do programa. Isso também funciona para mim, mas não é uma solução muito geral, pois você é codificado para uma versão JDK. A alternativa que estou usando agora é dar o caminho completo para "Java" na linha de comando quando executar o programa. Como (consistente com exemplos acima):

C:\\Program Files\Java\jdk1.7.0_02\jre\bin\java -cp ..\classes path.to.program.myProgram

Dar o caminho completo para a versão JDK significa que essa é a versão que está executando o programa, então esse é o que será buscado com o ToXProvider.getSystemjavacompiler ();

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top