如何在没有IDE的情况下工作时如何组织项目?

时间:2016-07-02 22:19:42

标签: java ide organization projects

我有一个程序,我在其中研究并试用了观察者模式。

我在终端上用nano写了它,我就这样保存了它:

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

我正确地编译了所有这些但是它一直说我的主要对类的引用不对,所以它不能从其他类中创建新的Object

这是交易:
我在eclipse上尝试了它,它可以与import package2.*;

一起使用

我在网上甚至书中找到的所有教程都只有一个包文件夹。

那么,我如何组织我的项目以及如何正确导入,因为我尝试了(差不多)所有内容并且到目前为止没有任何工作(我甚至尝试将第二个软件包复制到第一个软件包中,但它们也没有工作)

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

如上所述它在日食上工作正常,但终端告诉我:

lisaundamelia@lisaundamelia ~/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

3 个答案:

答案 0 :(得分:1)

您需要一次编译所有源文件。或者至少指定类路径,以便编译器知道在哪里找到Show所依赖的类:

javac -cp kneipe kneipe/location/Show.java

默认情况下,当前目录位于类路径中,因此您也可以移动到keipe目录,然后执行

javac location/Show.java

我强烈建议始终使用-d选项指定编译器应将.class文件放在与源文件不同的目录中的位置。

事实上,一旦你习惯了Java的工作原理,你最好使用像gradle或Maven这样的真实构建工具(但我更喜欢gradle),这会让你采用良好的布局约定,并且会编译, jar,等等,一切都适合你,只需一个命令。

答案 1 :(得分:0)

您应该根据班级命名文件。

<击>

ClassB.java例如应为Besucher.java

如果它在eclipse中有效,那么问题很可能就是你的编译方式。

我将如何做到这一点:

javac **/*.java

答案 2 :(得分:0)

您没有指定类路径。

renderThread = Thread(target=self.render, args=(gameDisplay,))  # add comma
updateThread = Thread(target=self.update, args=(clock,)) # here too