Eu tenho uma classe java compilada:
Echo.class
public class Echo {
public static void main (String arg) {
System.out.println(arg);
}
}
I cd
para o diretório e digite:java Echo "hello"
Eu recebo este erro:
C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo. Program will exit.
Qual é a maneira mais simples de obter meu código java em um formato que eu possa executar na linha de comando em vez de ter que usar o IDE Eclipse?
Respostas:
Experimentar:
Supondo que você compilou com:
Então, há uma chance de que o diretório "atual" não esteja em seu classpath (onde java procura por definições .class)
Se for esse o caso e listar o conteúdo do seu dir será exibido:
Então, tudo isso pode funcionar:
ou
E mais tarde, como Fredrik aponta, você receberá outra mensagem de erro como.
Quando isso acontecer, vá e leia a resposta dele :)
fonte
Você precisa especificar o caminho de classe. Isso deve servir:
Isso diz ao java para usar
.
(o diretório atual) como seu caminho de classe, ou seja, o lugar onde procura por classes. Observe que, ao usar pacotes, o caminho de classe deve conter o diretório raiz, não os subdiretórios do pacote. por exemplo, se sua classe émy.package.Echo
e o arquivo .class ébin/my/package/Echo.class
, o diretório de caminho de classe correto ébin
.fonte
Você não tem nenhum método principal válido ... A assinatura deve ser: public static void main ( String [] args);
Portanto, no seu caso, o código deve ser assim:
Edit: Observe que Oscar também está certo em que você está faltando. em seu classpath, você encontraria o problema que resolvi depois de lidar com esse erro.
fonte
Com o Java 11, você não terá mais que passar por essa bobagem!
Em vez disso, você pode fazer isso:
Você não precisa compilar de antemão, pois tudo é feito em uma única etapa.
Você pode obter o Java 11 JDK aqui: JDK 11 GA Release
fonte
Se você tem em sua fonte java
e sua classe é hello.java com
e nesse hello.java você tem
Então (após a compilação) mudeDir (cd) para o diretório onde está o seu hello.class. Então
Observe o diretório atual e o nome do pacote antes do nome da classe. Funciona no Linux Mint e espero que nos outros sistemas operacionais também
Obrigado Stack overflow por uma riqueza de informações.
fonte
./mypackage/hello.class
nome. Veja também: pergunta " Executando java no pacote da linha de comando ".Minha situação era um pouco complicada. Tive que fazer três etapas, já que estava usando um .dll no diretório de recursos, para o código JNI. Meus arquivos eram
Meu código continha a seguinte linha
Primeiro, eu tive que mover para o diretório do classpath
Em seguida, tive que alterar o caminho de classe para apontar para o diretório atual para que minha classe fosse carregada e eu tive que alterar o caminho de classe para apontar para o diretório de recursos para que minha dll fosse carregada.
Então, eu tive que executar o java usando o nome da classe.
fonte
Primeiro, você compilou a classe usando o compilador javac da linha de comando? Em segundo lugar, parece que seu método principal tem uma assinatura incorreta - ele deve receber uma matriz de objetos String, em vez de apenas um:
Depois de alterar seu código para incluir uma matriz de objetos String, você precisa ter certeza de que está imprimindo um elemento da matriz, em vez da própria matriz:
Se você quiser imprimir toda a lista de argumentos de linha de comando, você precisará usar um loop, por exemplo
fonte