2010-10-11 25 views
6

Moje doświadczenie w zakresie kodowania cofnęło się tylko o kilka lat, więc odpowiedź na to pytanie powinna być łatwa.Błąd kompilacji "Nie można znaleźć symbolu"

Napisałem dwa interfejsy: Klasa i Gra. Interface CLASS ma rozszerzyć interfejs GAME.

Oto źródła dwa interfejsy:

package Impl; 

public interface Game 
{ 
    //METHODS AND VARS 
} 


package Impl;  

public interface Class extends Game 
{ 
    //METHODS AND VARS 
} 

Teraz, gdy próbuję skompilować drugi interfejs, otrzymuję następujący błąd

class.java:4: cannot find symbol 
symbol: class Game 
public interface Class extends Game 
          ^

Moja klasa Gra jest kompilowany i pliku klasy znajduje się w tym samym katalogu, co oba pliki java. Nie byłem w stanie znaleźć rozwiązania. Czy ktoś ma jakieś pomysły?

Odpowiedz

8

W nazwach klas rozróżniana jest wielkość liter. Możliwe, że utworzono interfejs o nazwie game, ale odwołujesz się do niego w deklaracji interfejsu Class jako Game, której kompilator nie może znaleźć.

Istnieje jednak kolejna szansa, że ​​kompilujesz się z poziomu swojego pakietu Impl. Aby to zrobić, musisz odwołać się do swojej ścieżki klasy tak, aby kompilator mógł znaleźć klasy z podstawy struktury paczki. Można dodać -classpath .. argumentu do swojej javac przed nazwą klasy:

javac -classpath .. Class.java 

Alternatywnie, można zrobić to, co jest bardziej powszechne, kompilacji z korzenia swojej strukturze pakietu. Aby to zrobić, trzeba będzie podać ścieżkę do pliku Class:

javac Impl\Class.java 

zawsze można dodać -classpath . być jasne.

+0

Dziękuję. To całkowicie rozwiązało mój problem. Przyjąłem, że to problem z kodowaniem. – Jay

+7

Jay, widzę, że jesteś nowy w StackOverflow (Witamy!). Proszę "Zaakceptuj" rozwiązanie akf, jeśli to rozwiązało twój problem. Im więcej odpowiedzi przyjąłeś, tym chętniej ludzie będą odpowiadać na twoje pytania w przyszłości. – AndyG

6

Musisz przeczytać, jak działają ścieżki klas w języku Java i jak uporządkować swój kod źródłowy. Zasadniczo problem polega na tym, że kompilator javac kompiluje "Class.java", nie spodziewa się znaleźć "Game.class" w bieżącym katalogu. To (prawdopodobnie) szuka tego w "Impl/Game.class".

IBM strona „Managing the Java classpath” stanowi szczegółowe omówienie tego, jak ustawić ścieżkę klasy i jak java media (np java i javac) używać go znaleźć pliki klasowe. Strona Oracle "Setting the Classpath" zapewnia bardziej szczegółowe informacje ... ale musisz ją uważnie przeczytać.

Nawiasem mówiąc, masz jakieś okrucieństwa stylu w kodzie:

  • nazwach pakietów Java powinny być we wszystkich małych liter.
  • Wywołanie klasy Class jest złym pomysłem, ponieważ koliduje ona z klasą o nazwie java.lang.Class, która jest domyślnie importowana.
Powiązane problemy