Olá pessoal!
Estou iniciando meus estudos com Java através da apostila da Caelum e ao tentar resolver o exercício 02 do 4º capítulo me deparei com o seguinte problema:
cannot find symbol
symbol: class Funcionario
location: class Praticas_de_Java.TestaFuncionario
Funcionario f = new Funcionario();
^
Segue o enunciado da questão:
2) Transforme o modelo acima em uma classe Java(exercicio para modular um funcionário). Teste-a, usando uma outra classe que tenha o main. Você
deve criar a classe do funcionário chamada Funcionario, e a classe de teste você pode nomear como quiser.
A de teste deve possuir o método main.
Já pesquisei em vários tópicos da GUJ que constavam o mesmo problema, tentei todas as instruções que foram passadas, mas não obtive êxito quanto a solução.
Os arquivos estão na mesma pasta: Praticas_de_Java e com os nomes idênticos ao das classes correspondentes, mas ao compilar a classe TestaFuncionario o erro citado acima aparece. Não estou usando IDE, a compilação é feita através do DOS.
Se alguém puder me ajudar ficarei grata!!!
Seguem abaixo os códigos que eu fiz, para análise.
[code]public class Funcionario{
String nome;
String departamento;
String dataEntrada;
double salario;
String rg;
boolean ativo = true;
void bonifica(double aumento){
this.salario += aumento;
}
void demite(){
if(ativo)
this.ativo = false;
else
System.out.println("Funcionário não faz mais parte da empresa");
}
}
}[/code]
[code]public class TestaFuncionario{
public static void main(String[] args){
Funcionario f = new Funcionario();
f.nome = "Roberto";
f.departamento = "Informatica";
f.dataEntrada = "25/02/2013";
f.salario = 1200;
f.rg = "200400100493";
f.ativo = true;
f.bonifica(200);
f.demite();
System.out.println(f.salario);
}
}[/code]
Copiei seu código aqui, executei e funcionou, porém tinha um ‘}’ a mais na classe Funcionário.
Quando o erro ocorre?
Uhm…suspeitei Lucas.
Acredito que seja algum problema de configuração do classpath =\
Quando eu compilo a classe TestaFuncionário é que aparece esse erro. Eu coloquei o main dentro da classe Funcionário e compilou direitinho, mas apareceu outro erro na execução:
Could not find the main class: Funcionario. Program will exit
Corrigiu o erro na classe Funcionario?
Ao executar o programa por acaso esta escrevendo:
java TestaFuncionario
sem o “.class”?
Sim Erick. Retirei o } a mais da classe Funcionario. Porém o erro continua.
Ao compilar eu uso javac TestaFuncionario.java e ao executar eu uso java -cp . TestaFuncionario
Uso assim pois sem isso (-cp . ) ele nao funciona.
Será algum problema com a jdk?
Na verdade nao chego nem a executar, por que ele não compila =\
Já tentei separar os arquivos em outros diretorios e importá-los, mas tbm não deu certo.
Já pesquisei em tudo que foi site e nada, nenhumas das soluções resolveu meu problema.
Ah meninos, obrigada por tentarem me ajudar!
Você ta usando que IDE? Ou tá fazendo pelo bloco de notas e compilando no prompt?
Não estou usando IDE. Estou usando o notepad++ mesmo e compilando no prompt.
Aparece algum erro?(se sim poste a mensagem)
De qualquer forma tente compilar a classe Funcionario e depois a Classe TesteFuncionario.
Aparentemente parece ser um erro de classpath (ou outros códigos compilam/executam normalmente?)
Putz, eu não lembro muito de como usar com o prompt… Se não me engano, tem umas regrinhas que devem ser seguidas para que funcione… Não lembro muito bem, faz muito tempo. Da uma procurada no google.
Lukas já pesquisei, e já usei o -cp com tudo que foi jeito, usando o caminho do diretório completo ou com o . ;\
Configurei as variáveis do sistema conforme as recomendações. Todos os outros exercicios foram feitos da mesma forma e não deram nenhum erro.
Erick já fiz isso também. Minha última esperança é aqui no GUJ, já cansei de pesquisar no google ;(
da uma olha você não colocou a variáveis como “public” isso pode causar erro SE e somente se a classe que contem o “public static void main(String… args)” estiver em um pacote diferente da sua classe funcionário mais ou menos assim
caminho completo para funcionário (Exemplo)
Empresa.Funcionario
caminho completo para a classe TesteFuncionario
Teste.TesteFuncionario
Se não me engano quando você não declara o marcador de visibilidade (public,protected ou private) o campo é visível a todos as classe que estiverem no mesmo pacote.
Não tenho 100% de certeza disso mas devo estar com uns 95% de certeza xD vou da uma olhada
ha como eu disse aki :
http://www.tiexpert.net/programacao/java/public-private-protected.php
se n tiver o marcador de visibilidade ele fica limitado ao pacote
Acho que o modo que vai dar menos dor de cabeça será desinstalar o JDK e instalar novamente.
De qualquer forma poste o erro que aparece.
Victor eles estão no mesmo diretório, mas mesmo assim tentei…nao deu certo.
cannot find symbol
symbol : class Funcionario
location: class Praticas_de_Java.TestaFuncionario
Funcionario f = new Funcionario();
^
cannot find symbol
symbol : class Funcionario
location: class Praticas_de_Java.TestaFuncionario
Funcionario f = new Funcionario();
^
2 errors
ok eu acabei de testar as classes não obtive erro nenhum na hora de copilar eu fiz assim
$ javac Funcionario.java TestaFuncionario.java
e na hora de executar normal
$ java TestaFuncionario
funcionou sem problemas
claro que eu tomei cuidado com a chave extra que tem no seu código
Deu certo ao compilar agora, tirando o $ que não estava reconhecendo, compilou direitinho. Obrigada Victor!!
Agora deu problema na hora de executar 
Exception in thread “main” java.lang.NoClassDefFoundError: TestaFuncionario
Caused by: java.lang.ClassNotFoundException: TestaFuncionario
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: TestaFuncionario. Program will exit.
eu conseguir obter o mesmo erro que você (isso é uma boa noticia)
bem na hora de copilar se você passar um dos parâmetros errado ele vai da erro , por exemplo se você passar para o javac o nome de uma pasta foi assim que eu fiz der o erro
1º criei uma pasta chamado T
2º na hora de copilar eu chamei a pasta ao invés do arquivo que ela contem (EX
javac T)
hue que sorte tentando gerar o outro erro eu também fiz esse erro que você mostrou ai sem querer
bem ele ocorreu por causa que os arquivos não estão na mesma pasta quando eu criei essa pasta T e copilei assim
$ javac TestaFuncionario.java T/Funcionario.java
isso dará erro por que o java não irá achar a classe Funcionario