Erro main

17 respostas
Z

Boa tarde,

Estou iniciando meu estudos em java e estou encontrando algumas dificuldades na parte de configuração de variaveis de ambiente.

Estou trabalhando em um Windows Server 2003 onde possuo instalado o java com as seguintes versões

C:\JAVATESTE>java -version

java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode)

Estou configurndo as veriaves de ambiente pra o sistema da seguinte forma:

CLASSPATH = C:\Arquivos de programas\Java\jdk1.6.0_04
JAVA_HOME = C:\Arquivos de programas\Java\jdk1.6.0_04
Path = C:\pentaho\java\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Arquivos de programas\MySQL\MySQL Server 5.1\bin;C:\Arquivos de programas\Java\jdk1.6.0_04\bin

O meu programa inicial está com o seguinte código e é compilado sem erros:

class Segundo{
  public static void main ( String args[] ){
   System.out.println("Segundo Programa!");
  }
}

Como vocês podem ver, criei uma pasta chamada JAVATESTE em C:\ e estou salvando os arquivos e compilando os mesmo nesse diretório, porém, executar o seguinte erro é exibido :

C:\JAVATESTE>dir
 O volume na unidade C não tem nome.
 O número de série do volume é 24BB-7BB7

 Pasta de C:\JAVATESTE

23/02/2008  14:38    <DIR>          .
23/02/2008  14:38    <DIR>          ..
23/02/2008  14:32               452 PrimeiroProg.class
23/02/2008  14:32               152 PrimeiroPrograma.java
23/02/2008  14:43               433 Segundo.class
23/02/2008  14:43               113 Segundoprograma.java
               4 arquivo(s)          1.150 bytes
               2 pasta(s)   24.066.752.512 bytes disponíveis

C:\JAVATESTE>java Segundo
Exception in thread "main" java.lang.NoClassDefFoundError: Segundo

C:\JAVATESTE>

se faço o mesmo, porém, colocando os arquovos no diretório bin do java, é executado normalmente o progrqama.

Alguém saberia me dizer o que posso fazer para que possa rodar esse programa em qualquer unidade de minha maquina?

Obrigado!

17 Respostas

T

eu acho que é problema no classpath! =P

Z

e?

S

É um erro nas variáveis de ambiente, podes fazer assim “java c:\javateste\segundo” . Configurar Classpath: http://www.portaljava.com.br/home/modules.php?name=Content&pa=showpage&pid=26

Cumps :wink:

Z

Olá,

Então, as configurações em váriaves de ambiente para o sistema estão da seguinte forma:

CLASSPATH = C:\Arquivos de programas\Java\jdk1.6.0_04\lib
JAVA_HOME = C:\Arquivos de programas\Java\jdk1.6.0_04
Path = C:\pentaho\java\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Arquivos de programas\MySQL\MySQL Server 5.1\bin;%JAVA_HOME%\bin

Fazendo dessa forma continua dando error:

C:\>java C:\JAVATESTE\Segungo
Exception in thread "main" java.lang.NoClassDefFoundError: C:\JAVATESTE\Segungo

C:\>
S

Escreveste “Segungo”

Z

Não fez diferença

C:\>java C:\JAVATESTE\Segundo
Exception in thread "main" java.lang.NoClassDefFoundError: C:\JAVATESTE\Segundo

C:\>
T

CLASSPATH = C:\Arquivos de programas\Java\jdk1.6.0_04

Ele está procurando a classe Segundo, e nesse caminho.
Acredito eu que não está!

Z

Ok...

Se for dessa forma alterei o CLASSPATH para C:\JAVATESTE onde estou com os arquivos disposto conforme abaixo:

C:\JAVATESTE>dir
 O volume na unidade C não tem nome.
 O número de série do volume é 24BB-7BB7

 Pasta de C:\JAVATESTE

24/02/2008  17:53    <DIR>          .
24/02/2008  17:53    <DIR>          ..
24/02/2008  17:53               433 Segundo.class
24/02/2008  17:53               132 Segundoprograma.java
               4 arquivo(s)          1.169 bytes
               2 pasta(s)   24.100.179.968 bytes disponíveis

C:\JAVATESTE>

Fazendo dessa forma a execução da class Segundo em c:\JAVATESTE o seguinte erro ocorre:

C:\JAVATESTE>java Segundo
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

C:\JAVATESTE>

Meu código está da seguinte forma no arquivo Segundoprograma.java

import java.io.*;
class Segundo{
  public static void main ( String args[] ){
   System.out.println("Segundo Programa!");
  }
}
T

o nome da classe é SegundoPrograma e você tá executando Segundo?

tenta:
javac NomeDaClasse.java
java NomeDaClasse

T

Não se esqueça que o nome da classe deve ser igual ao nome do arquivo!

Exemplo

public class HelloWorld { public static void main (String [] args) { System.out.println("Hello World"); } }

o nome do arquivo será HelloWorld.java

Z

Não o nome do arquivo java é Segundoprograma.java, o nome da classe é Segundo.class

Estou compilando javac Segundoprograma.java e criando a classe Segundo.class

T

Entao você tá gerando errado!

O arquivo .class (arquivo que será interpretado na maquina virtual) deve ter o mesmo nome do seu arquivo .class!

Z

É estranho que dentro do diretório bin onde do java o programa executa normalmente, vejam:

C:\Arquivos de programas\Java\jdk1.6.0_04\bin>dir
 O volume na unidade C não tem nome.
 O número de série do volume é 24BB-7BB7

 Pasta de C:\Arquivos de programas\Java\jdk1.6.0_04\bin

24/02/2008  18:41    <DIR>          .
24/02/2008  18:41    <DIR>          ..
14/12/2007  01:41            25.600 appletviewer.exe
14/12/2007  01:41            25.600 apt.exe
14/12/2007  03:42            29.184 beanreg.dll
14/12/2007  01:41            25.600 extcheck.exe
20/02/2008  23:02               405 Hello.class
14/12/2007  01:59            45.056 HtmlConverter.exe
14/12/2007  01:41            25.600 idlj.exe
14/12/2007  01:41            25.600 jar.exe
14/12/2007  01:41            25.600 jarsigner.exe
14/12/2007  01:41            25.088 java-rmi.exe
14/12/2007  01:41           135.168 java.exe
14/12/2007  01:41            25.600 javac.exe
14/12/2007  01:41            25.600 javadoc.exe
14/12/2007  01:41            25.600 javah.exe
14/12/2007  01:41            25.600 javap.exe
14/12/2007  01:41           135.168 javaw.exe
14/12/2007  01:59           139.264 javaws.exe
14/12/2007  01:41            26.112 jconsole.exe
14/12/2007  01:41            25.600 jdb.exe
14/12/2007  01:41            25.600 jhat.exe
14/12/2007  01:41            25.600 jinfo.exe
14/12/2007  03:42            77.824 jli.dll
14/12/2007  01:41            25.600 jmap.exe
14/12/2007  01:41            25.600 jps.exe
14/12/2007  01:41            25.600 jrunscript.exe
14/12/2007  01:41            25.600 jstack.exe
14/12/2007  01:41            25.600 jstat.exe
14/12/2007  01:41            25.600 jstatd.exe
14/12/2007  01:41            25.600 keytool.exe
14/12/2007  01:41            25.600 kinit.exe
14/12/2007  01:41            25.600 klist.exe
14/12/2007  01:41            25.600 ktab.exe
14/12/2007  03:56           348.160 msvcr71.dll
14/12/2007  01:41            25.600 native2ascii.exe
20/02/2008  23:18               247 novo.java
14/12/2007  01:41            25.600 orbd.exe
14/12/2007  01:41            25.600 pack200.exe
14/12/2007  01:59            73.728 packager.exe
14/12/2007  01:41            25.600 policytool.exe
14/12/2007  01:41            25.600 rmic.exe
14/12/2007  01:41            25.600 rmid.exe
14/12/2007  01:41            25.600 rmiregistry.exe
14/12/2007  01:41            25.600 schemagen.exe
24/02/2008  18:41               433 Segundo.class
24/02/2008  17:53               132 Segundoprograma.java
14/12/2007  01:41            25.600 serialver.exe
14/12/2007  01:41            25.600 servertool.exe
20/02/2008  23:18               415 Teste2.class
14/12/2007  01:41            26.112 tnameserv.exe
14/12/2007  01:41           122.880 unpack200.exe
14/12/2007  01:41            25.600 wsgen.exe
14/12/2007  01:41            25.600 wsimport.exe
14/12/2007  01:41            25.600 xjc.exe
              53 arquivo(s)      2.106.976 bytes
               2 pasta(s)   24.086.298.624 bytes disponíveis

C:\Arquivos de programas\Java\jdk1.6.0_04\bin>Java Segundo
Segundo Programa!

C:\Arquivos de programas\Java\jdk1.6.0_04\bin>

o problema é que quero executar meu programas em qualquer lugar de minha maquina.

Porque será que não está funcionando?

Esse negocio do nome do arquivo não deve ser, tanto que como mostrei logo acima, a classe executa se estiver dentro do diretório bin do java

T

esse arquivo Segundo.class deve ter sido gerado provavelmente em alguma classe Segundo, e não SegundoPrograma

Z

Da uma olhada no meu código, o nome do arquivo pouco importa, o nome da minha classe é Segundo e quando eu compilo o arquivo Segundoprogrema.java é que ele cria a classe Segundo.class, dai eu utilizo o Java Segundo

Como você pode ver no code antrerior o programa funciona dendo do diretório bin do java , quero saber poque ele não fuciona for de lá!

o problema pelo que eu to vendo não é o nome do arquivo ou da classe, senão não funcionária em lugar nenhum, o problema parece ser configuração das váriaves de ambiente

S

O problema está mesmo nas variáveis, como resolvê-lo não sei :frowning:

T

o nome do arquivo importa sim, e muito!
e porque voce faz um import em uma classe de teste?
java.io.*?

Criado 23 de fevereiro de 2008
Ultima resposta 24 de fev. de 2008
Respostas 17
Participantes 3