Eu criei um arquivo List.java
na pasta UtilityPack
que contém este código
package Utilities; public class List { private class node{} public void insert(int data){} public void print(){} public static void main(String[] s){} }
Para compilar eu fiz
C:\UtilityPack>javac List.java
Mas quando tento correr com
C:\UtilityPack>java -classpath . List
OU
C:\UtilityPack>java List
Eu recebo erro
Exception in thread "main" java.lang.NoClassDefFoundError: List (wrong name: Uti lities/List) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 2) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Eu tenho tentado executar este programa das últimas 3 horas, mas nada funcionou.
Você precisa do nome totalmente qualificado, por exemplo
java -cp . Utilities.List
isto é, você está dizendo à JVM para olhar a partir da corrente direta ( -cp .
) para uma class Utilities.List
, que ela espera no arquivo Utilities\List.class
.
Para ser mais consistente, você deve colocar o arquivo .java em um diretório de Utilities
(sim – isso é tautológico – o pacote especifica isso, mas é uma prática consistente).
Também evito ligar para a sua List
turma. Em algum momento você vai importar um java.util.List
e tudo ficará muito confuso!
Finalmente, assim que você tiver mais do que algumas classs, investigue a formiga ou outra ferramenta de compilation e separe seus diretórios de source
e de target
.
Use o nome completo da class para lançar seu programa:
java Utilities.List
Mas o nome da pasta também deve corresponder ao nome do pacote.
Sua estrutura de diretórios precisa seguir o caminho do seu pacote Java. IOW, se a class List
estiver no pacote Utilities
, você precisa situá-la em um diretório chamado Utilities, que deve estar no nível raiz do seu projeto, ou seja, o caminho do arquivo de origem deve ser C: \ UtilityPack \ Utilities \ List.java . Quando você está em C: \ UtilityPack (raiz do projeto), compile e execute List
referenciando-o como Utilities.List
.
Você também pode considerar o uso do Eclipse, ele evitará que esse tipo de coisa aconteça ou qualquer outro IDE Java.