Classe não encontrada na compilação

9 respostas
G

Olá pessoal.
Tenho uma questão que suponho ser bem básica , porém que me está sendo difícil de resolver.

Propositadamente estou criando duas classes simples usando o NOTEPAD.
Tenho então dois arquivos .java no diretorio Teste. O arquivo tem o mesmo nome da classe que ele contem.
A seguir as duas classes (bem simples):

[color=green]public class AlgumaCoisa extends Object

{

private String nome;

private int numero;
public void setNome(String n){
	nome = n;
}
public String getNome(){
	return nome;
}

public void setNumero(int num){
	numero = num;
}
public int getNumero(){
	return numero;
}

}[/color]
a outra é :

[color=darkred]public class Testando

{

public static void main(String[] args)

{

AlgumaCoisa ac = new AlgumaCoisa();

String nome;

int numero;

ac.setNome(John);

ac.setNumero(80);

nome = ac.getNome();

numero = ac.getNumero();
System.out.println("Hello World!");
	System.out.println("Meu nome é: " + nome);
	System.out.println("Minha idade e :" + numero);
}

}[/color]
Como eu disse as duas classes estão no mesmo diretório.
A primeira classe compilou sem problemas. Gerou o .class.
Porém ao compilar o segundo código(class Testando), dá erro:

C:\Teste\Testando.java:5: cannot resolve symbol

symbol  : class AlgumaCoisa

location: class Testando

AlgumaCoisa ac = new AlgumaCoisa();

^

C:\Teste\Testando.java:5: cannot resolve symbol

symbol  : class AlgumaCoisa

location: class Testando

AlgumaCoisa ac = new AlgumaCoisa();

^

2 errors

Alguém poderia me dizer o que fazer para a compilação funcionar ??

Obrigado

9 Respostas

B

olá…

tira o

extends Object

onde está

public class AlgumaCoisa extends Object {

vai resolvero seu problema
[/code]

B

deixa eu te explicar o que está acontecendo Gilbertt.

vc tá criando um obejto (AlgumaCoisa) que é filho do Object explicitamente ao colocar o extends Object.

Aí, o certo é vc tirar esse extends Object, pois não precisa quando um objeto é filho de Object (obs.: todos os obejtos são filhos da classe object, mesmo que seja indiretamente).

Agora nesse seu caso, uma outra forma de corrigir:

na classe main vc ta criando um objeto AlgumaCoisa, certo? Ok, aí é que está o erro, vc deveria criar um objeto do tipo Object e depois fazer o “cast” pra usar o AlgumaCoisa, entendeu mais o menos a lógica?

J

8O

Depois explica pra gente por que fazer um cast do tipo para poder instanciar uma classe e diz d que livro vc tirou isso, pq eu realmente fiquei curioso.

Gilbertt :

Cara vc precisa colocar o import da classe AlgumaCoisa para que o compilador entenda.

algo do tipo:

import AlgumaCoisa;

public class Testando
{
public static void main(String[] args)
......

Pela falta do import o compilador não sabe de onde vem esta classe por isso da o erro que não é possivel resolver.
Quanto a ter o extends ou não de Object não sei direito se faz ou não diferença, mas crei que não.

J

Opa so corrigindo:

Vc disso que as classes estão na pasta Teste

Então o import ficaria assim

import Teste.AlgumaCoisa;
L

Ah, também quero dar minha opinião…
olha só, vc disse que esta na mesma pasta certo?!
vc tem algum package declarado para uma dessas classes?

package teste;

...

se tiver esse package, vc tem que compilar elas com o nome completo, incluindo o package, ex:

Se estrutura de dir eh:
teste/AlgumaCoisa.java
teste/Testando.java

E se vc compilar assim:
…/teste/javac AlgumaCoisa.java
…/teste/javac Testando.java

vai dar o erro que vc falou porque ele esta num package teste.

o certo seria vc compilar assim
…/javac teste/AlgumaCoisa.java
…/javac teste/Testando.java

e depois executar assim
…/java teste.Testando

Agora se eles estão tudo na mesma pasta e não tem package… ah, dai não sei :wink:

J

Cara acho que vc não esta num bom dia!!! heheh

Criei uma estrutura assim como vc fez.

Dentro de uma pasta Teste, copiei as tuas classes veja abaixo:

public class AlgumaCoisa extends Object
{
	private String nome;
	private int numero;

	public void setNome(String n){
		nome = n;
	}
	public String getNome(){
		return nome;
	}

	public void setNumero(int num){
		numero = num;
	}
	public int getNumero(){
		return numero;
	}
}
public class Testando
{
	public static void main(String[] args)
	{
		AlgumaCoisa ac = new AlgumaCoisa();
		String nome;
		int numero;
		ac.setNome("John");
		ac.setNumero(80);
		nome = ac.getNome();
		numero = ac.getNumero();
		
		
		System.out.println("Hello World!");
		System.out.println("Meu nome é: " + nome);
		System.out.println("Minha idade e :" + numero);
	}
}

Compilei AlgumaCoisa e depois Testando e ambos compilaram.Depois pra testar
exclui os dois .class e tentei compilar so o Testando, ele compilou AlgumaCoisa
e depois testando… 80
Para compilar fiz o modo norma, dentro do diretorio Teste:

javac AlgumaCoisa.java
javac Testando.java

Uso o jdk 1.42_06, estou realmente espantado…

G

Olá Pessoal.

Fico maravilhado e agradecido pela atenção e o esforço dos que opinaram alguma sugestão para me ajudar.

No entanto… todas as sugestões não funcionam da forma que eu quero fazer.

Quando digo a forma que eu quero fazer, estou querendo dizer que estou tentando fazer da forma mais primitiva possível, ou seja, não queria usar nehuma IDE ou outra ferramenta facilitadora.
Estou simplesmente usando um bloco de notas e o COMMAND (DOS) para fazer este Teste.
Será que alguma configuração do JDK pode estar errada ? Se estiver, não consigo imaginar o que , pois a instalação parece ser algo tão simples.

Só para ver se não havia algum problema com o meu codigo, testei-os usando o JDEV. Por incrivel que pareça, não dá nenhum erro. Compila, executa , tudo legalzinho.

Só não consigo fazê-lo através do DOS.

Para compilar uso :
C:>j2sdk1.4.2_05\bin\javac Teste\AlgumaCoisa.java

C:>j2sdk1.4.2_05\bin\javac Teste\Testando.java

Mais uma vez , grato pela atenção.
E se alguem tiver mais alguma sugestão…agradeço.
Abraços

G

He He Hey Pessoal !!

Consegui fazer funcionar !!!

Vejam bem: do jeito que eu estava fazendo, tanto arquivos .java como os .class estavam dentro do mesmo diretório Teste.

Depois de compilar o primeiro arquivo (AlgumaCoisa.java), resolvi remover este mesmo arquivo do diretório mantendo somente o .class dele.

Então compilei o arquivo Testando.java e…DEU CERTO.

Porque isto acontece ? Não sei explicar com certeza.
Mas dá a impressão que o compilador confunde o AlgumaCoisa.class com o AlgumaCoisa.java e por isto dá erro.
Se alguem tiver a explicação correta, eu tb ficaria muito grato.

J

Cara ai SDS(So Deus Sabe)!!!

Quando compilei os meus os .java estavam no mesmo diretorio do .class e também usei o javac normalmente.

Será que alguma configuração do tipo JAVA_HOME ou diferenças do compilador para cada S.O.???

Criado 23 de outubro de 2006
Ultima resposta 24 de out. de 2006
Respostas 9
Participantes 4