在没有 IDE 的情况下如何组织我的项目?

How do I organise my projects while working without an IDE?

我有一个程序,我在其中学习并尝试了观察者模式。

我在我的终端上用 nano 写的,我这样保存的:

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

我正确地编译了所有这些,但它一直在说,在我的主要部分中,对 类 的引用不正确,因此它无法从其他 [=] 中创建新的 Object 39=].

这是交易:
我在 eclipse 上试过了,它在 import package2.*;

上运行良好

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

那么,我该如何组织我的项目以及如何正确导入,因为我尝试了(几乎)所有的方法,但到目前为止没有任何效果(我什至尝试将第二个包复制到第一个包中,但也没有用) .

A 类:

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

那是 B 类:

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

如前所述,它在 eclipse 上运行良好,但终端告诉我:

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

您应该根据 class 命名文件。

例如

ClassB.java 应该是 Besucher.java

如果它在 eclipse 中工作,那么问题可能出在你的编译方式上。

我会这样做:

javac **/*.java

您没有指定类路径。

javac -cp kneipe kneipe/location/Show.java

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

javac -cp kneipe kneipe/location/Show.java

默认情况下,当前目录在class路径下,所以你也可以移动到keipe目录下,直接

javac location/Show.java

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

事实上,一旦您习惯了 Java 的工作方式,您最好使用真正的构建工具,例如 gradle 或 Maven(但我更喜欢 gradle) ,这将使您采用良好的布局约定,并通过一个命令为您编译、jar 等一切。