我用Java编写了一个用于学校的小游戏。我们有具有给定功能的库。我编写了一个重复命令的代码(while),我使用println检查了命令是否正确运行,但是在GUI中你看不到结果,只看到最后的结果。
项目:https://drive.google.com/open?id=0B5Ehxz_FAn6BMjVPOWY5MkgycVk&authuser=0
代码:
public void spielen () {
if (guthaben > 0) {
if (endlosspielAktiv) {
while (guthaben > 0) {
kasten.Ringe.faerbeUm(); //Here the GUI doesn't show the results
ZEICHENFENSTER.gibFenster().warte(500);
guthabenRunter();
}
setEndlosspielAktiv(false);
} else {
kasten.Ringe.faerbeUm();
}
} else if (guthaben == 0) {
setEndlosspielAktiv(false);
}
guthabenRunter();
}
答案 0 :(得分:0)
只有在返回调用线程的所有挂起和运行方法后,才会更新GUI。
在您的情况下,GUI的更新会延迟,直到方法spielen()
返回。
要获得即时结果,您可以使用这样的附加线程:
public void spielen () {
new Thread(new Runnable() {
@Override
public void run() {
if (guthaben > 0) {
if (endlosspielAktiv) {
while (guthaben > 0) {
kasten.Ringe.faerbeUm();
ZEICHENFENSTER.gibFenster().warte(500);
guthabenRunter();
}
setEndlosspielAktiv(false);
} else {
kasten.Ringe.faerbeUm();
}
} else if (guthaben == 0) {
setEndlosspielAktiv(false);
}
guthabenRunter();
}
}).start();
}
spielen()
的所有代码都在异步运行,并且不会阻止返回的方法。
如果您想了解更多关于线程的信息,我建议您阅读(德语)电子书http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_14_003.htm
的相应章节