Correção: não foi possível encontrar ou carregar a classe principal

O erro " Não foi possível localizar ou carregar a classe principal " ocorre ao usar um comando java no prompt de comando para iniciar um programa Java especificando o nome da classe no terminal. A razão pela qual isso acontece é principalmente devido ao erro de programação do usuário ao declarar a classe.

Não foi possível encontrar ou carregar a linha de comando principal da classe Java

Como mencionado anteriormente, esse erro não está relacionado ao sistema e o usuário comete um erro em vários cenários, conforme mostrado abaixo. Antes de seguir em frente, supomos que você tenha um conhecimento básico da linguagem de programação Java e como ela funciona.

O que causa o erro "Não foi possível localizar ou carregar a classe principal" em Java?

A mensagem 'Não foi possível localizar ou carregar a classe principal' significa que a primeira etapa do mecanismo Java buscando a classe para execução falhou. O comando java não conseguiu localizar a classe no diretório correto.

Em alguns casos, você precisa adicionar o caminho correto do arquivo e apontar o terminal Java para o local correto. Como você está executando o comando a partir do terminal da linha de comando, o computador não sabe onde a classe está localizada ou onde está localizada. Em IDEs direcionados, esse não é o problema, pois o IDE mantém um ponteiro apontando para o diretório de trabalho atual.

O que é a sintaxe 'java'?

Antes de iniciarmos a solução de problemas, por que o terminal está retornando um erro ao tentar executar, primeiro precisamos examinar a sintaxe do comando. Se você não estiver usando a sintaxe correta, enfrentará esse erro inevitavelmente.

A sintaxe normal do comando é algo assim:

 java [...] [...] 

Aqui está uma opção de linha de comando, é um nome de classe Java totalmente qualificado e é um argumento de linha de comando que é passado para seu aplicativo quando o pacote inteiro é compilado.

Um exemplo de um comando válido é:

 java -Xmx100m com.acme.example.ListAppuals kevin setas bart 

O comando acima fará com que o comando java execute as seguintes operações:

  • Ele irá procurar por uma versão compilada da classe ' com.acme.example.ListAppuals '.
  • Depois de pesquisar, ele carregará a turma.
  • Em seguida, quando a classe for carregada, a classe será pesquisada por um método 'principal' com uma assinatura, modificadores e tipo de retorno válidos. Uma amostra da classe principal seria algo como:
 public static void main (String []) 
  • O método será chamado com os argumentos 'kevin', 'arrows' e 'bart' como string [].

Como corrigir 'Não foi possível encontrar ou carregar a classe principal'

Solução 1: Verificando o Argumento do Nome da Classe

O erro mais comum cometido pelos usuários é que eles fornecem um nome de classe errado como um argumento (ou um nome de classe correto é um formato errado). Como estamos declarando parâmetros na linha de comando, é altamente provável que você passe o argumento do nome da classe em um formato incorreto. Aqui vamos listar todos os cenários possíveis onde você pode cometer um erro.

  • Escrevendo um nome de classe simples . Se você declarar a classe em um pacote como 'com.acme.example', deverá usar o nome completo da classe, incluindo o pacote no comando Java.
 java com.acme.example.ListAppuals 

ao invés de

 java ListAppuals 
  • Você deve declarar um nome de classe em vez de declarar um nome de arquivo ou nome de caminho. Java não busca a classe se você declarar um nome de caminho / nome de arquivo para ela. Entradas incorretas incluem o seguinte:
 java ListAppuals.class java com / acme / example / ListAppuals.class 
  • O invólucro deve ser levado em consideração. Os comandos Java diferenciam maiúsculas de minúsculas e, se você cometer um erro de até mesmo uma letra, não poderá carregar a classe principal. Um exemplo de erros incorretos são:
 java com.acme.example.listappuals 
  • Você não deve declarar um nome de arquivo de origem . Como mencionado antes, você só precisa declarar a classe no formato completo de nome de classe. Exemplo de um erro é:
 java ListAppuals.java 
  • Este erro também ocorrerá se você cometer um erro de digitação ou se esquecer de escrever o nome da classe completamente .

Se você cometeu algum erro na declaração do nome da classe, corrija-o e tente iniciar o programa.

Solução 2: Verificando o classpath

Se você declarou o nome da classe corretamente, mas ainda está mostrando o erro, é provável que o comando java não tenha encontrado o nome da classe especificado no caminho. O caminho de classe é um caminho no qual o tempo de execução do Java procura arquivos de recurso e de classe. Você pode facilmente definir o caminho de classe usando dois comandos diferentes, conforme mostrado abaixo:

 C:> sdkTool -classpath classpath1; classpath2 ... C:> conjunto CLASSPATH = classpath1; classpath2 ... 

Para obter mais informações sobre o caminho de classe, você deve verificar os seguintes documentos.

Documentação do Comando Java

Configurando o classpath

Solução 3: Diretório de verificação

Quando você declara um diretório como um caminho de classe, ele sempre corresponderá à raiz do namespace. Por exemplo, se “/ usr / local / acme / classes” estiver no caminho de classe, o Java procurará uma classe “com.acme.example.Appuals”. Ele procurará uma classe com o seguinte nome de caminho:

 /usr/local/acme/classes/com/acme/example/Appuals.class 

Então, em essência, se você colocar o seguinte endereço no classpath, o Java não poderá encontrar a classe:

 / usr / local / acme / classes / com / acme / example 

Você também deve verificar seu subdiretório e ver se ele corresponde ao FQN. Se suas classes FQN forem “com.acme.example.Appuals”, o Java irá procurar por um “Appuals.class” no diretório “com / acme / example”.

Para dar um exemplo, vamos supor o seguinte cenário:

  • A classe que você deseja executar é: com.acme.example.Appuals
  • O caminho completo do arquivo é: /usr/local/acme/classes/com/acme/example/Appuals.class
  • O diretório de trabalho atual é: / usr / local / acme / classes / com / acme / example /

Então os seguintes cenários seriam válidos:

 # errado, FQN é necessário java Appuals # errado, não há nenhuma pasta `com / acme / example` no diretório de trabalho atual java com.acme.example.Appuals # errado, similar ao cenário acima java -classpath. com.acme.example.Appuals # OK; um classpath relativo é definido como java -classpath ../../ .. com.acme.example.Appuals # OK; um caminho de classe absoluto é definido como java -classpath / usr / local / acme / classes com.acme.example.Appuals 

Nota: O caminho de classe também precisa incluir todas as outras classes (não-sistema) que seus aplicativos precisam.

Solução 4: Verificando o pacote da turma

Se todas as soluções acima forem verdadeiras no seu caso, você precisa ter certeza de que seu código-fonte está colocado na pasta correta. Além disso, você declarou corretamente o pacote . Se você executar seu código com um IDE, ele provavelmente informará sobre o problema. No entanto, no nosso caso, uma vez que estamos executando no prompt de comando, o erro passará despercebido e você receberá o erro de classe em discussão.

Artigos Interessantes