2017-07-04 9 views
0

私は数年前にいくつかのJavaクラスを使いました。今、それに戻ってきた。私は崇高を使用して、非常に簡単なチュートリアル建物何かを従っていました(それは私が適切なIDEを得ることに気にしませんでしたので、簡単だった)2つのファイルがある:コンパイラが同じパッケージのクラスを識別しない

package hello; 

public class HelloWorld { 
    public static void main(String[] args) { 
     Greeter greeter = new Greeter(); 
     System.out.println(greeter.sayHello()); 
     System.out.println("random alt shift"); 
    } 
} 

package hello; 

public class Greeter { 
    public String sayHello() { 
     return "Hello world!"; 
    } 
} 

グリーターは食事をコンパイル私が追加した場合 javac HelloWorld.java

HelloWorld.java:6: error: cannot find symbol 
     Greeter greeter = new Greeter(); 
     ^
    symbol: class Greeter 
    location: class HelloWorld 
HelloWorld.java:6: error: cannot find symbol 
     Greeter greeter = new Greeter(); 
          ^
    symbol: class Greeter 
    location: class HelloWorld 
2 errors 

と "輸入hello.Greeterを;":しかし、HelloWorldのは私に次のエラーを与えます私が取得:それは正常に動作

IDEで
HelloWorld.java:2: error: cannot find symbol 
import hello.Greeter; 
      ^
    symbol: class Greeter 
    location: package hello 
HelloWorld.java:6: error: cannot find symbol 
     Greeter greeter = new Greeter(); 
     ^
    symbol: class Greeter 
    location: class HelloWorld 
HelloWorld.java:6: error: cannot find symbol 
     Greeter greeter = new Greeter(); 
          ^
    symbol: class Greeter 
    location: class HelloWorld 
3 errors 

、誰でもできるように親切などの問題がここにある

+1

@SureshAttaいいえ、彼はいません。明示的に同じパッケージからクラスをインポートする必要はありません。 – Tom

答えて

7
javac HelloWorld.java 

が起こっていただきまし説明します。あなたは間違ったディレクトリにいます。パッケージ階層が始まる1つのレベルを上にして、発行する必要があります。

javac hello/HelloWorld.java 
+1

すばらしく働いて、なぜ私は1つ上のレベルにする必要があるのか​​説明できますか? –

+0

それはコンパイラの仕組みだからですか? – EJP

+0

コンパイルはパッケージ構造を尊重する必要があり、パッケージは 'javac'を伝えていたレベルよりも1つ上のレベルにあり、コマンドラインオプションを使用してクリアしませんでした。 –

関連する問題