2013-03-08 39 views
6

Tôi đang cố cấp một quyền truy cập tệp .java cho lớp học trong một tệp .java khác. Tôi muốn làm điều này trên dòng lệnh. Ví dụ làm thế nào tôi sẽ làm điều này bằng cách sử dụng hai tập tin dưới đây?Hai tệp java, trong cùng một thư mục, một tệp truy cập vào các lớp khác/s?

File: "ToImport.java"

package ABC; 
public class ToImport { 
    private String aName; 
    public ToImport(String Name) { 
     aName = Name; 
    } 
    public String toString() { 
     return("Text: " + aName); 
    } 
} 

File: "TheImport.java"

package ABC; 
public class TheImport { 
     public static void main(String[] args) { 
     ToImport abc = new ToImport("a"); 
     System.out.println("TEST: " + abc); 
    } 
} 

Khi tôi gõ javac ToImport.java tôi nhận được không có lỗi nhưng khi tôi gõ javac TheImport.java tôi nhận được lỗi sau ,

Command Prompt Error Message

+0

trong những thư mục các lớp học được đặt và làm thế nào và từ đâu bạn chạy java –

+3

Nhiều khả năng bạn đang gọi 'javac' từ thư mục trong đó hai các tệp được đặt. Cả hai đều cần phải nằm trong một thư mục có tên "ABC" (tên gói), và bạn sẽ cần phải gọi 'javac ABC \ TheImport.java' từ thư mục chứa" ABC ". Đó là dự đoán của tôi, anyway. – iamnotmaynard

+0

vì cả hai tệp nằm trong cùng một gói và được khai báo công khai, bạn không cần phải lo lắng về việc gọi, chỉ cần tạo đối tượng là đủ, nhưng câu hỏi là, như jigar đã nói, bạn biên dịch nó như thế nào –

Trả lời

6

TheImport tùy thuộc vào loại ToImport. Vì vậy, khi bạn biên dịch TheImport trình biên dịch cũng phải biên dịch ToImport hoặc có quyền truy cập vào lớp đã được biên dịch ToImport.

Hãy nói rằng bạn có một thư mục trông như sau,

src 
└── ABC 
    ├── TheImport.java 
    └── ToImport.java 

Bên cạnh đó chúng ta hãy nói rằng bạn đang ở trong thư mục src và muốn biên dịch để ../classes. Bạn phải sử dụng một trong các lệnh sau:

javac -d ../classes ABC/ToImport.java ABC/TheImport.java 

hoặc

javac -d ../classes ABC/ToImport.java 
javac -cp ../classes -d ../classes ABC/TheImport.java 

Nếu cả hai .java file phụ thuộc vào nhau sau đó bạn sẽ phải biên dịch cả hai cùng một lúc như trong lệnh đầu tiên.

Cũng lưu ý rằng các gói phải là chữ thường để tôn trọng các quy ước đặt tên Java.

Để chạy chương trình chính bạn có thể gõ,

cd ../classes 
java ABC.TheImport 
+0

Giải thích tốt –

+0

Câu trả lời hoàn hảo. Bạn có thể thêm các jars bên ngoài trong khi biên dịch trong chính '-cp' và chúng nên tách biệt': '. Bạn cũng sẽ phải truyền các jars trong khi chạy tệp lớp bằng cách sử dụng lệnh 'java'. – backslashN

3

Từ gói tuổi có chứa các file java chạy:

javac *.java 

hoặc

javac TheImport.java ToImport.java 

Trình biên dịch cần phải biên dịch cả hai lớp cùng một lúc, nó không thể độc lập biên soạn một lớp duy nhất với phụ thuộc vào nhau.

+0

Trình biên dịch doesn ' t phải biên dịch cả hai lớp cùng một lúc. Nó có thể biên dịch một và sau đó biên dịch một cái khác phụ thuộc vào nó bằng cách sử dụng tham số 'javac'' -cp', như trong câu trả lời cho câu hỏi này bởi JB Nizet. – Max

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