2012-11-24 82 views
13

我有根目录是这样的:javac的 “无法找到符号”

├── 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()); 
     } } 

我编制的自行车。 java并成功,但不适用于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 

我尝试使用Netbeans和IT WORKS运行这些文件!但是为什么在CLI中编译时它不起作用?

+1

你为什么张贴您的类的源?这与你的问题有什么关系?请阅读[SSCCE](http://SSCCE.org) – Bohemian

+0

你用什么类路径编译? –

+0

你是从src'编译的吗? –

回答

7

尝试从BicycleMain.java删除行import vehicles.*;,并在命令行中使用javac编译它们。

通过它发生,因为当你在的javac编译你现在的样子的文件夹vehicles在和你写在BicycleMain.java声明import vehicles.*;这意味着编译器存在vehicles文件夹这是不是这里的情况中的另一个文件夹vehicles

+0

这是我的错误在不正确的文件夹中编译,我删除了导入命令并尝试在“src”中编译,它的工作原理!谢谢... – andrian

16

首先,要使用javac编译java源文件,您需要指定要显式编译的文件。

例子:

javac PathToSourceFile/FileName.java 

您无需提供path如果源文件是在当前工作目录。其次,每当java遇到import abc.xyz.ClassName;它都会尝试解决abc/xyz/ClassName相对于classpath或当前工作目录。

所以,如果你在车辆文件夹内编译你的代码,它不会编译,因为它会寻找文件夹车辆内的文件夹车辆(这不存在!)。

但是,你能够做到这一点,当车辆文件夹内

javac -cp ../ BicycleMain.java 

,它应该编译,因为类路径将被设置为目录(../)含车辆。这将解决你的Bicycle类。

然后用

java -cp ../ vehicles/BicycleMain运行。

1

只需从开始删除包行,它将100%工作。

进入该文件夹中的文件通过终端和 输入javac存储*的.java

将不会有必要导入类了。

+0

只有选项,为我工作。顺便说一下,我正在使用Windows 7。 – rsb2097

0

我已经解决了这个问题,从“src”编译。

事情是这样的:javac ./my_folder/my_file.java

亲切的问候