A JVM não consegue encontrar minha classe - NoClassDefFoundError

3 respostas
leonardo.moreti

Olá pessoal, estou com um problema para executar uma classe java minha.

Este é o código dela:

import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Walkthrough extends JFrame {

	public Walkthrough() {
		super("Sample App");
		setLayout(new FlowLayout());
		add(new JButton("button"));
		add(new JCheckBox("check"));
		add(new JLabel("label"));
		setSize(new Dimension(250,80));
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		JFrame.setDefaultLookAndFeelDecorated(true);
		new Walkthrough().setVisible(true);
	}
}

O código-fonte dela está na pasta src. Compilo ela normalmente e jogo o executável na pasta classes.

Entro na pasta classes e digito:

$ java Walkthrough

Funciona normalmente.

Mas quando tento executá-la(de dentro da pasta classes mesmo) , passando 2 JARs na flag classpath:

$ java -cp …/substance.jar:…/trident.jar -Dswing.defaultlaf=org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel Walkthrough

obtenho o seguinte erro:



Exception in thread main java.lang.NoClassDefFoundError: Walkthrough

Caused by: java.lang.ClassNotFoundException: Walkthrough

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)

Could not find the main class: Walkthrough.  Program will exit.

A JVM nao encontra a minha classe Walkthrough quando eu utilizo o classpath.

O que acontece? A classe Walkthrough está no diretório corrente, e se eu não usar o classpath ela encontra. Mas se eu usar, ela não encontra.

3 Respostas

peczenyj
do man java
-cp classpath
              Specifies a list of directories, JAR archives, and ZIP archives to search for class files.  Class path entries are separated by colons (:).  Speci-
              fying -classpath or -cp overrides any setting of the CLASSPATH environment variable.

              If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the current directory (.).

Ou seja, se vc não informa o classpath nem tem uma variavel de ambiente chamada CLASSPATH, admite-se o diretorio corrente (.) como classpath. Quando vc seta um classpath o default (.) some. Basta adicionar o mesmo no final com :. por exemplo.

leonardo.moreti

Adicionei o diretório corrente no classpath:

$ java -cp …/substance.jar:…/trident.jar:. -Dswing.defaultlaf=org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel Walkthrough

mas o erro ainda persiste:
[b]
/cygdrive/c/Documents and Settings/olivleo/Desktop/File Transfer Application II/classes

$ java -cp /substance.jar:/trident.jar:. -Dswing.defaultlaf=org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel Walkthrough

Exception in thread main java.lang.NoClassDefFoundError: Walkthrough

Caused by: java.lang.ClassNotFoundException: Walkthrough

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)

Could not find the main class: Walkthrough.  Program will exit.

[/b]
leonardo.moreti

E ai pessoal, alguém tem mais alguma sugestão pra me ajudar?

Criado 1 de junho de 2010
Ultima resposta 2 de jun. de 2010
Respostas 3
Participantes 2