2012-11-24 19 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

import vehicles.*;BicycleMain.javaから削除して、コマンドラインでjavacでコンパイルしてみてください。あなたがのjavacでコンパイルしている間、あなたはフォルダvehiclesであり、あなたは別のフォルダvehiclesがここに当てはまらないvehiclesフォルダにあり、コンパイラに意味BicycleMain.javaで声明import vehicles.*;を書くので、それが起こるところで

+0

このmy faultが間違ったフォルダでコンパイルすると、インポートコマンドが削除され、 "src"でコンパイルが試行されます。ありがとう... – andrian

16

最初に、javacを使用してJavaソースファイルをコンパイルするには、明示的にコンパイルするファイルを指定する必要があります。

例:

javac PathToSourceFile/FileName.java 

ソースファイルは、現在の作業ディレクトリにある場合pathを提供する必要はありません。

第2に、Javaがimport abc.xyz.ClassName;に遭遇すると、classpathまたは現在の作業ディレクトリに関してabc/xyz/ClassNameを解決しようとします。

車の中にいてコードをコンパイルすると、フォルダビークル(存在しない!)内のフォルダビークルが検索されるため、コンパイルされません。

しかし、とき車両フォルダ内

javac -cp ../ BicycleMain.java 

あなたはこれを行うことができますし、クラスパスは、車を含む(../)ディレクトリに設定されますので、それは、コンパイルする必要があります。 Bicycleクラスが解決されます。その後、

して実行する

java -cp ../ vehicles/BicycleMainを使用しています。

1

パッケージの行を最初から削除すると100%動作します。

Goではファイルが端末と タイプのjavacを経由して保存されているフォルダ*の.java

にすぎクラスをインポートする必要はありません。

+0

私のために働いたオプションのみ。ところで、私はWindows 7を使用しています。 – rsb2097

0

"src"からコンパイルしてこの問題を解決しました。

このような何か:javac ./my_folder/my_file.java

種類よろしく

関連する問題