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 classe principal na linha de comando Java

Como mencionado antes, esse erro geralmente não está relacionado ao sistema e o usuário comete um erro em vários cenários, conforme mostrado abaixo. Antes de prosseguir, presumimos 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 encontrar ou carregar a classe principal' em Java?

A mensagem 'Não foi possível encontrar ou carregar a classe principal' significa que a primeira etapa do mecanismo Java que busca 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 de arquivo correto e apontar o terminal Java para o local correto. Como você está executando o comando a partir do terminal de linha de comando, o computador não sabe onde a classe pode ser encontrada 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 é sintaxe 'java'?

Antes de começarmos a solucionar o motivo do terminal estar retornando um erro ao tentar executar, primeiro precisamos examinar a sintaxe do comando. Se não estiver usando a sintaxe correta, você enfrentará esse erro inevitavelmente.

A sintaxe normal do comando é mais ou menos 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 todo o pacote é compilado.

Um exemplo de comando válido é:

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

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

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

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

Solução 1: Verificar o argumento do nome da classe

O erro mais comum que os usuários cometem é fornecer um nome de classe errado como argumento (ou um nome de classe correto é uma forma errada). Como estamos declarando parâmetros na linha de comando, é altamente provável que você passe o argumento do nome da classe de uma forma errada. Listaremos aqui todos os cenários possíveis em que você pode cometer um erro.

  • Escrever um nome de classe simples . Se você declarar a classe em um pacote como 'com.acme.example', deverá usar o nome de classe completo, 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 caminho. Java não busca a classe se você declarar um nome de caminho / nome de arquivo para ela. As entradas incorretas incluem o seguinte:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • O revestimento 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 será capaz de 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 de nome de classe completo correto. Exemplo de erro é:
java ListAppuals.java
  • Esse erro também ocorrerá se você cometer um erro de digitação ou se esquecer de escrever o nome da classe por completo .

Se você cometeu algum erro negligente ao declarar o nome da classe, certifique-se de corrigi-lo e tente iniciar o programa.

Solução 2: Verificando o classpath

Se você declarou o nome da classe corretamente, mas o erro ainda é mostrado, é provável que o comando java não tenha encontrado o nome da classe especificado no caminho. O classpath é um caminho onde o Java runtime procura por recursos e arquivos de classe. Você pode definir facilmente o caminho de classe usando dois comandos diferentes, conforme mostrado abaixo:

C:> sdkTool -classpath classpath1; classpath2 ... C:> definir 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 caminho de classe

Solução 3: Verificando o diretório

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 pesquisará por uma classe “com.acme.example.Appuals”. Ele procurará uma classe com o seguinte caminho:

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

Portanto, em essência, se você colocar o seguinte endereço no caminho de classe, o Java não conseguirá 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”, então 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á pasta `com / acme / example` no diretório de trabalho atual java com.acme.example.Appuals # errado, semelhante ao cenário java -classpath acima. com.acme.example.Appuals # OK; um caminho de classe relativo é definido java -classpath ../../ .. com.acme.example.Appuals # OK; um caminho de classe absoluto é definido 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 do sistema) que seus aplicativos precisam.

Solução 4: Verificando o pacote da aula

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