2016-07-02 10 views
0

私はObserver Patternを研究し試したプログラムを持っています。IDEなしで作業中にプロジェクトを整理するにはどうすればよいですか?

は、私は自分の端末上でナノとそれを書いた、と私はこのようにそれを保存した:私は正確にそれらのすべてコンパイル

kneipe 
    (location 
     (Show.java)) 
    (leute 
     (Beobachter.java 
     Comedian.java)) 

が、それは私のメインのクラスへの参照が正しくないことを言い続け他のクラスからは新規にObjectを作成することはできません。ここで

は契約です:
私は日食でそれを試し、それがimport package2.*;

そして、私は本でオンラインかさえ見つかったチュートリアルのすべてで正常に動作一つのパッケージフォルダのみです。

私はプロジェクトをどのように整理し、どのように正しくインポートするためには、ほとんどすべてを試しましたが、何もこれまで働いていませんでした(2番目のパッケージを最初にコピーしようとしました。

にClassA:

package leute; 

import java.util.*; 

public class Comedian extends Observable { 
    String name = ""; 
    int numGags = 0; 
    String joke = "abc"; 
    boolean toldjoke = false; 

    public Comedian(String name, int numGags) { 
     this.name = name; 
     this.numGags = numGags; 
    } 

    public void telljoke() { 
     this.toldjoke = true; 
     System.out.println(joke); 
     setChanged(); 
     notifyObservers(); 
    } 

    private String getname() { 
     return this.name; 
    } 

    private int getnumgags() { 
     return this.numGags; 
    } 
    } 

ザッツClassBの:メインザッツ

package leute; 

import java.util.*; 

public class Besucher implements Observer { 
    String name = ""; 
    int intus = 0; 
    boolean lacht = false; 

    public Besucher(String name, int intus) { 
     this.name = name; 
     this.intus = intus; 
    } 

    private String getname() { 
     return this.name; 
    } 

    public void enought(Besucher a) { 
     a.lacht = false; 
    } 

    public void update(Observable o, Object arg) { 
     lacht = true; 
     System.out.println("HAHAHAH!!!"); 
    } 
} 

package location; 

import leute.*; 
import java.util.*; 

public class Show { 

    public static void main(String args[]) { 
     Observer franz = new Besucher("Franz", 6); 
     Observer karl = new Besucher("Karl", 1); 
     Comedian mark = new Comedian("Mark", 5); 

     mark.addObserver(franz); 

     mark.telljoke(); 


     mark.addObserver(karl); 

     mark.telljoke(); 

     mark.deleteObserver(karl); 
     mark.deleteObserver(franz); 

     mark.telljoke(); 
    } 
} 

としては、それが日食に正常に動作しますが、端末は、この私に語っ言及

[email protected] ~/Schreibtisch/Alle Projekte $ javac 
    kneipe/location/Show.java 
kneipe/location/Show.java:3: error: package leute does not exist 
import leute.Besucher; 
      ^
kneipe/location/Show.java:4: error: package leute does not exist 
import leute.Comedian; 
      ^
kneipe/location/Show.java:10: error: cannot find symbol 
     Observer franz = new Besucher("Franz", 6); 
          ^
    symbol: class Besucher 
    location: class Show 
kneipe/location/Show.java:11: error: cannot find symbol 
     Observer karl = new Besucher("Karl", 1); 
          ^
    symbol: class Besucher 
    location: class Show 
kneipe/location/Show.java:12: error: cannot find symbol 
     Comedian mark = new Comedian("Mark", 5); 
     ^
    symbol: class Comedian 
    location: class Show 
kneipe/location/Show.java:12: error: cannot find symbol 
     Comedian mark = new Comedian("Mark", 5); 
          ^
    symbol: class Comedian 
    location: class Show 
6 errors 
+0

**あなたに何を伝える** **どの正確なメッセージ**を教えてください。それを言い換えてはいけません。正確で完全なメッセージとそれが参照する関連コードを投稿してください。 –

+0

いくつかのコード、特にパッケージラインとクラス定義を提供してください。さらに、正確なエラーメッセージが役に立ちます。 – Matt

答えて

1

すべてのソースファイルを一度にコンパイルする必要があります。あるいは、少なくとも、コンパイラはショーが依存するクラスを見つけるためにどこを知っているように、クラスパスを指定します。デフォルトでは

javac -cp kneipe kneipe/location/Show.java 

を、現在のディレクトリがクラスパスにあるので、あなたもkeipeディレクトリに移動することができ、かつ

コンパイラが.classファイルを置く場所をソースファイルとは別のディレクトリに指定する場合は、常に-dオプションを使用することを強くお勧めします。

実際に、Javaの仕組みに慣れたら、gradleやMavenのような実際のビルドツールを使うのが良いでしょう(しかし、私はgradleを好むでしょう)。これは良いレイアウト規約を採用し、コンパイルします、瓶などあなたのためのすべてのものを、単一のコマンドで。

0

クラスに応じてファイルの名前を付ける必要があります。

ClassB.javaは、たとえば Besucher.javaである必要があります。

それがEclipseで動作する場合、問題はどのようにコンパイルしているのでしょうか。ここで

は、私はそれを行うだろうかです:

javac **/*.java 
0

あなたはクラスパスを指定していませんでした。

javac -cp kneipe kneipe/location/Show.java 
関連する問題