Package, import e diretório jre/classes

4 respostas
B

Olá galera.
Estou tendo problemas em prosseguir o livro (Deitel “Java Como Programar”).
O exemplo no qual estou encontrado um erro, sugere que sejam criadas duas classes (

dois programas .java ).

  1. Time2.java

Na primeira classe ( Time2.java ) é criado um package:

package com.deitel.jhtp3.ch08;

o arquivo é compilado da seguinte forma

javac -d c:\Java\jdk1.2.1\jre\classes Time2.java

Criando assim a árvore de diretórios:

\com\deitel\jhtp3\ch08 dentro de c:\Java\jdk1.2.1\jre\classes

O diretório \classes dentro de \jre é segundo o livro um diretório conhecido pelo

compilador e pelo interpretador para alocamento de classes.
Sendo que ao compilar-se a classe TimeTest2.java obtem-se sucesso quanto ao endereço

referido no import.
Entretando ao rodar-se a classe TimeTest2.class obtenho erro quanto ao endereço da

classe Time2.class.

  1. TimeTest2.java

import com.deitel.jhtp3.ch08.Time2;

Compilando TimeTest2.java não obtenho erros.
Mais ao executar essa classe com o comando:

java -cp .\ TimeTest2

O interpretador retorna o seguinte erro

Exception in thread “main” java.lang.NoClassDefFoundError: com/deitel/jhtp3/ch08/Time2

Estive me informando sobre definições na variável de ambiente CLASSPATH que tambêm não

resolveu meu problema.

As configurações das variáveis de ambiente são as seguintes :

Variáveis de usuário para Usuario1

CLASSPATH %JAVA_HOME%
JAVA_HOME C:\Java\jdk1.2.1
PATH C:\Java\jdk1.2.1\bin

Seria algum informação que eu preciso dizer ao interpretador na hora do comando java ?

Grato desde já

Cordialmente

Igor

4 Respostas

B

Pessoal, escrevi o tópico e andei depurando o problema.

  1. Notei que a referencia feita no import em TimeTest2.java compreende
    com.deitel.jhtp3.ch08.Time2 como com\deitel\jhtp3\ch08 a partir do diretório
    onde se roda o arquivo TimeTest2.java

  2. Notei que pode se usar alguns flags para compilar o programa como -sourcepath - classpath, mais nenhum dos flags surtil efeito.

  3. Preciso que o interpretador java compreenda que guardo classe no jre\classes, pois me parece que o javac compreende esse diretório, sendo que ao compilar o TimeTes2.java ele não me retorna erro algum, mesmo dizendo que naum encontrou a classe

com.deitel.jhtp3.ch08.Time2

dentro de jre\classes.
Apenas o interpretador java não acha essa classe mesmo setando o caminho completo em java -cp -classpath

Alguma sugestão ?

S

Oi,

acho que temos um problema rs…

acho que vc não configurou corretamente as variaveis de ambiente:
JAVA_HOME
PATH
CLASSPATH

como está configurado ???

pois se estiverem configuradas corretamente vc pode usar o comando javac de qualquer pasta e não apenas compilar o que está dentro de jre\classes

outra coisa a classe TimeTest2.java é do package com\deitel\jhtp3\ch08 então vc tem que colocar sua classe dentro desse package

Outra coisa… vc poderia atualizar seu java ? pois pelo que parece vc está usando a versão jdk1.2.1 e já estamos na 1.5.6 ?

B

Configurei as Variáveis de ambiente do usuário como :

CLASSPATH = %JAVA_HOME%
JAVA_HOME = C:\Java\jdk1.2.1
PATH = C:\Java\jdk1.2.1\bin

Consigo compilar os arquivos em qualquer diretório.
Eu apenas não consigo que o interpretador ( java ) compreenda a instrução

import com.deitel.jhtp3.ch08.Time2;

assim como ele compreende

import javax.swing.JOption/pane;

sendo que pretendo rodar TimeTest2.class dentro de c:\java\livro\cap8
e guardar Time2.class o package dentro de c:\java\jdk1.2.1\jre\classes

Noto que quando fazemos menção em um import a uma classe não encontrada, o compilador javac imediatamente reporta o erro, e quando eu sigo com o javac ele não me retorna erro, ou seja compreende onde está Time2.class

Mais o interpretador java não, ele acusa NoClassDefError, algo parecido para com.deitel.jhtp3.ch08.Time2

Como explico no itém acima.

Estou usando o jdk1.2.1 por convenção sobre o jdk utilizado no livro, compreendo que existem verssões mais atuais.

Cordialmente

Igor

B

Vi em um artigo minha dúvida sobre packages. Dizia esse que eu implementasse a CLASSPATH o caminho inicial de onde guardarei meus packages.
Então implementei a CLASSPATH:

CLASSPATH = %JAVA_HOME%;c:\java\jdk1.2.1\jre\classes

O appletviewer reconhece esse diretório para onde guardo meu packages .class, entretando o interpretador java não, ao contrário, o java reconhece os caminhos do import a partir do diretório onde uso a classe que importa o package…

Alguma idéia ?

Criado 2 de maio de 2006
Ultima resposta 6 de mai. de 2006
Respostas 4
Participantes 2