我有一个程序,我在其中研究并试用了观察者模式。
我在终端上用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
答案 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