2010-10-11 55 views
6

Trải nghiệm mã hóa của tôi chỉ mới trở lại vài năm, vì vậy câu hỏi này phải đủ dễ trả lời."Không thể tìm thấy biểu tượng" lỗi biên dịch

Tôi đã viết hai giao diện: Lớp và Trò chơi. Giao diện CLASS được cho là sẽ mở rộng giao diện GAME.

Dưới đây là những nguồn giao diện hai:

package Impl; 

public interface Game 
{ 
    //METHODS AND VARS 
} 


package Impl;  

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

Bây giờ, khi tôi cố gắng biên dịch giao diện thứ hai, tôi nhận được lỗi sau

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

lớp Game của tôi được biên soạn và tập tin lớp học nằm trong cùng một thư mục với cả hai tệp java. Tôi đã không thể tìm ra một giải pháp. Có ai có ý tưởng nào?

Trả lời

8

Tên lớp phân biệt chữ hoa chữ thường. Có thể bạn đã tạo một giao diện có tên là game, nhưng bạn tham chiếu đến giao diện đó trong tờ khai giao diện ClassGame, trình biên dịch không thể tìm thấy.

Tuy nhiên, có một cơ hội khác mà bạn đang biên dịch từ trong gói Impl của mình. Để làm điều này, bạn sẽ cần phải tham khảo classpath của bạn để trình biên dịch có thể tìm các lớp từ cơ sở của cấu trúc gói. Bạn có thể thêm một arg -classpath ..-javac của bạn trước khi tên lớp:

javac -classpath .. Class.java 

Ngoài ra, bạn có thể làm những gì là phổ biến hơn, biên dịch từ thư mục gốc của cấu trúc gói của bạn. Để làm như vậy, bạn sẽ cần phải xác định đường dẫn đến file Class của bạn:

javac Impl\Class.java 

bạn luôn có thể thêm một -classpath . được rõ ràng.

+0

Cảm ơn bạn. Điều này giải quyết vấn đề của tôi hoàn toàn. Tôi đã giả định nó là một vấn đề mã hóa. – Jay

+7

Jay, tôi thấy bạn mới ở StackOverflow (Chào mừng!). Hãy "Chấp nhận" giải pháp của akf nếu nó giải quyết được vấn đề của bạn. Bạn càng chấp nhận nhiều câu trả lời, những người sẵn sàng hơn sẽ trả lời câu hỏi của bạn trong tương lai. – AndyG

6

Bạn cần phải đọc về cách thức hoạt động của classpath Java và cách bạn nên tổ chức mã nguồn của mình. Về cơ bản, vấn đề của bạn là khi trình biên dịch javac biên dịch "Class.java", nó không mong đợi tìm "Game.class" trong thư mục hiện tại. Nó (có lẽ) đang tìm kiếm nó trong "Impl/Game.class".

Trang "Managing the Java classpath" của IBM cung cấp một cuộc thảo luận chuyên sâu về cách đặt classpath của bạn và cách tiện ích java (ví dụ: javajavac) sử dụng nó để tìm tệp lớp. Trang "Setting the Classpath" của Oracle cung cấp thêm thông tin ngắn gọn hơn ... nhưng bạn cần đọc kỹ thông tin này.

Bằng cách này, bạn đã có một số tội ác kiểu trong mã của bạn:

  • tên gói Java nên có trong tất cả các trường hợp thấp hơn.
  • Gọi một lớp học Class là một ý tưởng tồi, bởi vì điều này va chạm với lớp được gọi là java.lang.Class được nhập theo mặc định.
Các vấn đề liên quan