14
respostas

Erro: Não foi possível localizar nem carregar a classe principal MeuPrograma

MeuPrograma.java foi salvo no desktop, javac MeuPrograma.java cria o arquivo MeuPrograma.class corretamente, porém tentar executar java MeuPrograma retorna o erro Erro: Não foi possível localizar nem carregar a classe principal MeuPrograma.

14 respostas

João,

Sua classe possui o método main? Se possuir por favor mostre o código para conseguir te ajudar melhor.

class MeuPrograma {
    public static void main(String[] args) {
        System.out.println("sua mensagem aqui");
    }
}

o mesmo problema se repete quando mudo class e/ou nome do arquivo. Já tentei com os primeiros exercícios do curso Java I e todos eles dão esse erro....

Versões:

PS C:\Users\c070054\Desktop> java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
PS C:\Users\c070054\Desktop> javac -version
javac 1.8.0_152

O código está certo, o problema deve ser suas variáveis de ambiente. Dá uma olhada.

quais variáveis? Não tem nada falando disso na Aula 1

PS C:\Users\c070054\Desktop> echo $ENV:JAVA_HOME
C:\Program Files\Java\jdk1.8.0_152

Essas: https://cursos.alura.com.br/course/primeiros-passos-com-java/task/2061

Ah sim, passei reto porque quando olhei já estava tudo configurado, inclusive C:\Program Files\Java\jdk1.8.0_152\bin no PATH. Que mais? Aliás, como dá pra ver, o java -version e java c -version rodaram corretamente, e eu comentei já que o arquivo .class foi criado corretamente.

Já tentei class OlaMundo no arquivo OlaMundo.java, rodar o javac criou o arquivo OlaMundo.class, mas ao tentar rodar java OlaMundo recebo aquele erro. Também já tentei class MeuPrograma e MeuProgramaModificado, nos arquivos MeuPrograma.java e MeuProgramaModificado.java, ambos criaram seus respectivos arquivos .class, mas também dão erro ao tentar executar com java.

class OlaMundo {
    public static void main(String[] args) {
        System.out.println("Oi! Minha primeira aplicação Java!");
    }
}
PS C:\Users\c070054\Desktop> javac OlaMundo.java
PS C:\Users\c070054\Desktop> java OlaMundo
Erro: Não foi possível localizar nem carregar a classe principal OlaMundo
PS C:\Users\c070054\Desktop>

Exatamente, tem que ajustar as variáveis de ambiente!!!

"Clique no botão Novo para adicionar uma nova variável do sistema: seu nome é JAVA_HOME (tudo maiúsculo) e seu valor será o diretório onde instalou o Java (provavelmente algo como C:\Program Files\Java\jdk1.7.0_03)."

PS C:\Users\c070054\Desktop> echo $ENV:JAVA_HOME
C:\Program Files\Java\jdk1.8.0_152

"Agora vamos alterar a variável do sistema PATH (ou Path). Não crie uma variável nova, altere a variável PATH que já existe. Escolha ela e clique em Editar. No final do valor atual complemente com o valor %JAVA_HOME%\bin. Não se esqueça do ponto e vírgula que separa o path anterior desse novo path que estamos colocando."

PS C:\Users\c070054\Desktop> echo $ENV:PATH
C:\Python36\Scripts\;C:\Python36\;C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath;/opt\sybase\OCS-15_0\lib3p;/opt\sybase\OCS-15_0\dll;/opt\sybase\OCS-15_0\bin;/opt\sybase\DataAccess\ODBC\dll;c:\Program Files (x86)\IBM\WebSphere MQ\Java\lib;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Arquivos de Programas\GTK2-Runtime\lib;c:\Program Files (x86)\IBM\WebSphere MQ\bin;c:\Program Files (x86)\IBM\WebSphere MQ\bin64;c:\Program Files (x86)\IBM\WebSphere MQ\tools\c\samples\bin;C:\adb;C:\Program Files\nodejs\;C:\ProgramData\chocolatey\bin;C:\Program Files\Java\jdk1.8.0_152\bin;C:\tools\php72;C:\Users\c070054\Downloads\cmder;C:\Users\c070054\Downloads\;C:\Users\c070054\Downloads\cmder\vendor\git-for-windows\cmd;C:\Users\c070054\Downloads\cmder\vendor\git-for-windows\mingw32\bin;C:\Users\c070054\Downloads\cmder\vendor\git-for-windows\mingw32\libexec\git-core;C:\HashiCorp\Vagrant\bin;C:\Users\c070054\AppData\Local\GitHubDesktop\bin;C:\Users\c070054\AppData\Local\Programs\Git\cmd;C:\Users\c070054\AppData\Roaming\npm

PATH já contém C:\Program Files\Java\jdk1.8.0_152\bin

"Após a instalação no seu Windows teste seu java com os comandos

java -version

javac -version

Tudo ocorreu como esperado?"

PS C:\Users\c070054\Desktop> javac -version
javac 1.8.0_152
PS C:\Users\c070054\Desktop> java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
PS C:\Users\c070054\Desktop>

Qual variável estaria faltando?

João Ciocca,

Por favor tenta rodar os seguintes comandos e verifica se apare o arquivo compilado:

javac OlaMundo.java
dir
java OlaMundo
PS C:\Users\c070054\Desktop> javac OlaMundo.java
PS C:\Users\c070054\Desktop> ls OlaMundo*


    Diretório: C:\Users\c070054\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       12/01/2018     17:06            450 OlaMundo.class
-a----       12/01/2018     14:42            141 OlaMundo.java


PS C:\Users\c070054\Desktop> java OlaMundo
Erro: Não foi possível localizar nem carregar a classe principal OlaMundo

Fui avançando no curso mesmo sem conseguir executar... resolvi tentar mais uma vez:

class Data {
    int dia;
    int mes;
    int ano;

    void preencheData(int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}

class Funcionario {
    String nome;
    String departamento;
    double salario;
    String dataEntrada;
    String rg;
    Data dataDeEntrada;

    // metodos
    void recebeAumento(double aumento) {
        this.salario += aumento;
    }

    double calculaGanhoAnual() {
        return this.salario * 12;
    }

    void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salário: R$" + this.salario);
        System.out.println("Data de entrada: " + this.dataEntrada);
        System.out.println("RG: " + this.rg);
        System.out.println("Ganho anual: R$" + this.calculaGanhoAnual());
        System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
    }

}

class Empresa {
    String nome;
    Funcionario[] empregados;
    String cnpj;
    int livre = 0;

    void adiciona(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }
}
class TestaEmpresa {
    public static void main(String[] args) {
        Empresa empresa = new Empresa();
        empresa.empregados = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.salario = 1000;
        f1.dataDeEntrada = new Data();
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.salario = 1700;
        f2.dataDeEntrada = new Data();
        empresa.adiciona(f2);

        empresa.empregados[0].mostra();
        empresa.empregados[1].mostra();
    }
}

o javac compila o código sem nenhum erro, mas quando tento executar "java TestaEmpresa" eu ainda tenho mensagem de erro:

PS C:\Users\c070054> java TestaEmpresa
Erro: Não foi possível localizar nem carregar a classe principal TestaEmpresa

Cara se tua instalação tá perfeita, testa o código dentro de alguma IDE como o Eclipse, BlueJ ou o Jcreator. Todos fazem a varredura do path e se configuram automaticamente .

Cara eu vi, essa anomalia sendo relatada no stackoverflow e no guj . Procura ai. Alguns relataram solução com java -cp nome_classe . Mas usar -cp é uma apelação muito grande, para um código simples . Teu aquivo tem alguma palava package?

https://stackoverflow.com/questions/11922681/differences-between-java-cp-and-java-jar#11922724

http://respostas.guj.com.br/31989-erro-nao-foi-possivel-localizar-nem-carregar-a-classe-principal

Os IDEs mais leves:

https://bluej.org/

http://www.jcreator.org/

O importante é praticar, apenas ler não adianta. Então se precisar formatar a máquina pro java funcionar então manda ver!É Brincadeira. Apenas não desiste.

Cara olha se exite uma pasta assim C:\ProgramData\Oracle\Java

manda um dir nesse diretório e olha se existe o javapath apontando para a pasta target que fica nesse mesmo diretório. Olha se a versão do java é a mesma indicada por essa pasta. Procura ver se tem alguma flag diferente sendo injetada nesse javapath.

O que não pode é um correto public static void main não ser aceito.

02/02/2018  09:06    <JUNCTION>     javapath [C:\ProgramData\Oracle\Java\javapath_target_83740375]
02/02/2018  09:06    <DIR>          javapath_target_83740375

Obrigado pela resposta, Romulo! Eu tô usando o VSCode, e no terminal dele todo o resto parece funcionar direito... os erros acontecem tanto quando eu uso o terminal interno do VSCode quanto usando terminal externo (seja o cmd.exe ou Powershell).

Há uma pasta ProgramData\Oracle\Java:

C:\ProgramData\Oracle\Java>dir
 O volume na unidade C é Windows
 O Número de Série do Volume é CCA8-BF88

 Pasta de C:\ProgramData\Oracle\Java

11/10/2017  17:45    <DIR>          .
11/10/2017  17:45    <DIR>          ..
11/01/2018  18:47    <DIR>          .oracle_jre_usage
11/10/2017  17:45    <DIR>          installcache_x64
11/10/2017  17:45                14 java.settings.cfg
11/10/2017  17:45    <JUNCTION>     javapath [C:\ProgramData\Oracle\Java\javapath_target_17537843]
11/10/2017  17:45    <DIR>          javapath_target_17537843

e a pasta javapath possui apenas os executáveis java.exe, javaw.exe e javaws.exe.

Tentando novamente, como você sugeriu, fui usar o -cp...

PS C:\Users\c070054\Desktop> java MeuProgramaModificado
Erro: Não foi possível localizar nem carregar a classe principal MeuProgramaModificado
PS C:\Users\c070054\Desktop> java -cp MeuProgramaModificado
Uso: java [-options] class [args...]
           (para executar uma classe)
   ou  java [-options] -jar jarfile [args...]
           (para executar um arquivo jar)
em que as opções incluem:
(...insira aqui o help gigante)
Consulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obter mais detalhes.
PS C:\Users\c070054\Desktop>

João Ciocca, ao menos você consegue treinar usando o VSCode. Então segue adiante. O importante é treinar e treinar. Agora se tu fizer a chamada do java funcionar diretamente do terminal compartilha a solução aqui no fórum.Cara eu fico imaginando um problema desse na hora da instalação de um sistema no cliente. Eu ia ficar perdido também.

Mas eu ainda tentaria algo assim: Criaria um diretório,vazio para armazenar apenas o aquivo java que eu quero traduzir em bytecodes. Teria certeza que o nome do arquivo é igual ao definido na classe(Apenas uma classe no arquivo). Se falhasse eu trataria de reinstalar a JRE e o JDK . Feito isso configuraria o path. E faria o teste no terminal novamente.