2012-11-24 53 views
13

Tôi đã vào thư mục gốc như thế này:Javac "không thể tìm thấy biểu tượng"

├── classes 
└── src 
    └── vehicles 
     ├── Bicycle.java 
     └── BicycleMain.java 

Bicycle.java

package vehicles; 

public class Bicycle { 

    public int cadence; 
    public int gear; 
    public int speed; 

    public Bicycle(int startCadence, int startSpeed, int startGear) { 
    gear = startGear; 
    cadence = startCadence; 
    speed = startSpeed; 
    } 

    public void setCadence(int newValue) { 
     cadence = newValue; 
    } 
    public void setGear(int newValue) { 
    gear = newValue; 
    } 
    public void setSpeed(int newValue) { 
    speed = newValue; 
    } 
    public int getGear() { 
    return gear; 
    } 
    public int getCadence() { 
    return cadence; 
    } 
    public int getSpeed() { 
    return speed; 
    } 
    public void applyBrake(int decrement) { 
    speed -= decrement; 
    } 
    public void speedUp(int increment) { 
    speed += increment; 
    } 

BicycleMain.java

package vehicles; import vehicles.*; 

public class BicycleMain { 
     public static void main (String args[]){ 
     Bicycle Bike = new Bicycle(10, 20, 1); 
     System.out.println("We have a new bicycle with speed = " +Bike.getSpeed()+", cadence = "+Bike.getCadence()+", gear = "+Bike.getGear()); 
     } } 

tôi biên soạn các xe đạp. java và thành công, nhưng không dành cho BicycleMain.java:

symbol : class Bicycle 
location: class vehicles.BicycleMain 
    Bicycle Bike = new Bicycle(10, 20, 1); 
    ^
src/vehicles/BicycleMain.java:6: cannot find symbol 
symbol : class Bicycle 
location: class vehicles.BicycleMain 
    Bicycle Bike = new Bicycle(10, 20, 1); 
        ^
2 errors 

Tôi cố gắng chạy các tệp này bằng Netbeans và IT WORKS! nhưng tại sao nó không hoạt động khi tôi biên dịch trong CLI?

+1

Tại sao bạn đã đăng nguồn cho lớp học của bạn? Làm thế nào nó có liên quan đến câu hỏi của bạn? Vui lòng đọc [SSCCE] (http://SSCCE.org) – Bohemian

+0

Bạn đã sử dụng classpath nào cho quá trình biên dịch? –

+0

Bạn đang biên dịch từ 'src'? –

Trả lời

7

Thử xóa dòng import vehicles.*; từ BicycleMain.java và chúng biên dịch bằng javac trong dòng lệnh.

Bằng cách nó xảy ra vì trong khi bạn đang biên soạn trong javac bạn đang ở trong thư mục vehicles và bạn viết một tuyên bố import vehicles.*; trong BicycleMain.java có nghĩa là để trình biên dịch có một thư mục vehicles trong thư mục vehicles mà không phải là trường hợp ở đây

+0

này lỗi của tôi để biên dịch trong thư mục không chính xác, tôi đã xóa lệnh nhập khẩu và cố gắng biên dịch trong "src", nó hoạt động! cảm ơn ... – andrian

16

Trước tiên, để biên dịch tệp nguồn java bằng cách sử dụng javac, bạn cần xác định tệp để biên dịch một cách rõ ràng.

Ví dụ:

javac PathToSourceFile/FileName.java 

bạn không cần phải cung cấp các path nếu file nguồn là trong thư mục làm việc hiện tại.

Thứ hai, bất cứ khi nào gặp java import abc.xyz.ClassName;, nó sẽ cố gắng giải quyết abc/xyz/ClassName đối với classpath hoặc thư mục làm việc hiện tại. Vì vậy, nếu bạn đang ở trong thư mục xe và biên dịch mã của bạn, nó sẽ không biên dịch bởi vì nó sẽ tìm kiếm các phương tiện thư mục bên trong các phương tiện thư mục (không tồn tại!).

nhưng, bạn có thể làm điều này khi bên trong thư mục xe

javac -cp ../ BicycleMain.java 

và nó sẽ biên dịch, vì classpath sẽ được thiết lập vào thư mục (../) chứa xe. sẽ giải quyết lớp học Bicycle của bạn.

và sau đó sử dụng

java -cp ../ vehicles/BicycleMain để chạy.

1

Chỉ cần xóa dòng gói khỏi đầu và nó sẽ hoạt động 100%.

Đến thư mục mà tập tin được lưu trữ thông qua thiết bị đầu cuối và loại javac * .java

Sẽ không có nhu cầu nhập khẩu các lớp học quá.

+0

Chỉ có tùy chọn phù hợp với tôi. Nhân tiện, tôi đang sử dụng Windows 7. – rsb2097

0

Tôi đã giải quyết vấn đề này, biên soạn từ "src".

Something như thế này: javac ./my_folder/my_file.java

Kind Regards

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