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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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
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:
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.