2012-11-15 43 views
12

Tôi có hai lớp Sở hữu và OwningAccessor. Các tệp nằm trong cùng một thư mục.javac "không thể tìm thấy biểu tượng" lỗi với dòng lệnh

public class Owning { 
    String _name = ""; 
    public void printBanner() 
    { 
    } 
    public void printOwning(double amount) 
    { 
     printBanner(); 

     //print details 
     System.out.println("name:" + _name); 
     System.out.println("amount:" + amount); 
    } 
} 


public class OwningAccessor { 
    public void access() 
    { 
     Owning o = new Owning(); 
     o.printOwning(500); 
    } 
} 

Khi tôi cố gắng biên dịch OwningAccessor với javac -cp . OwningAccessor.java, tôi đã nhận lỗi biên dịch.

symbol : class Owning 
location: class smcho.OwningAccessor 
     Owning o = new Owning(); 
     ^
OwningAccessor.java:6: cannot find symbol 
symbol : class Owning 
location: class smcho.OwningAccessor 
     Owning o = new Owning(); 
       ^

Có vấn đề gì với điều này? Mã biên dịch tốt dưới IDE nhật thực.

+4

chúng có nằm trong cùng một thư mục không? Hiển thị cấu trúc thư mục đường dẫn nguồn của bạn –

+0

Chúng nằm trong cùng thư mục. – prosseek

+0

Không repro, hoạt động ở đây. Nó có hoạt động không nếu bạn biên dịch trước 'Owning.java'? –

Trả lời

15

Ok, chúng ta hãy giả sử bạn có mã phân bố trong các tập tin như sau

myproject 
├── out 
└── src 
    ├── OwningAccessor.java 
    └── Owning.java 

Tới dấu nhắc lệnh của bạn, và thay đổi thư mục để myproject. Khi đã ra lệnh sau:

javac -d out -sourcepath src src/OwningAccessor.java 

Tôi vừa thử nghiệm và nó hoạt động tốt. Các lớp được biên soạn của bạn sẽ nằm trong thư mục out:

. 
├── out 
│   ├── OwningAccessor.class 
│   └── Owning.class 
└── src 
    ├── OwningAccessor.java 
    └── Owning.java 

Biên soạn một lớp sẽ kích hoạt việc biên soạn tất cả các lớp phụ thuộc khác. Trình biên dịch sẽ tự động tìm chúng trong thư mục src.

+0

điều này chỉ tuân thủ chương trình, tôi tự hỏi tại sao tôi không nhận được đầu ra của systme.out.print trong CMD? – Faizan

+0

Cách tốt nhất là tạo một cái lọ, nó sẽ chăm sóc tất cả điều này và khá đơn giản. – ramu

12

Hãy chắc chắn rằng bạn biên dịch cả Owning.java và OwningAccessor.java, như vậy:

javac -cp . Owning.java OwningAccessor.java

Eclipse biên dịch tất cả các file cần thiết cho bạn, đó là lý do tại sao không làm việc ở đó.

+0

Liệu java có tự tìm ra các phụ thuộc không? –

+2

Nếu bạn sử dụng cờ '-sourcepath' trong trình biên dịch –

+0

Sourcepath của bạn nên thực hiện thủ thuật, thật không may là tôi không thể kiểm tra nó như javac trên máy bị treo với ACCESS_VIOLATION trên bất kỳ thứ gì tôi cố gắng biên dịch ... – Kninnug

1

Cố gắng làm cho một SourcePath dụ đúng:

 
javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\MySingleton.java 

javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\Main.java 

Trong "tạm thời" chúng tôi alocate nguồn lực và với sourcepath chỉ ra nơi là file java.

Các vấn đề liên quan