在没有 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 等一切。
我有一个程序,我在其中学习并尝试了观察者模式。
我在我的终端上用 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 等一切。