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
.
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.