当我从我的评分课“down()”调用一个函数时。当我从同一个类调用该函数时,它按预期工作。
他是App App中的功能:
public void down(){
for(int first=0; first<board.length; first++){
for(int second=0; second<board[first].length; second++){
System.out.print(board[first][second]);
}
System.out.println("");
}
for(int first=0; first<cords.length; first++){
for(int second=0; second<cords[first].length; second++){
System.out.print(cords[first][second]);
}
System.out.println("");
}
boolean pass=true;
int max=getMaxRow(cords);
for(int i=0; i<cords.length; i++){
if(cords[3][0] < 19 && board[cords[i][0]+1][cords[i][1]]>0){
if(cords[i][0]==max){
pass=false;
}else{
boolean contains=false;
for(int x=i; x<cords.length; x++){
if(cords[i][0]==cords[x][0]-1 && cords[i][1]==cords[x][1]){
contains=true;
}
}
if(contains==false){
pass=false;
}
}
}
}
if(cords[3][0] < 19 && pass==true){
deleteCordsOnBoard();
for(int i=0; i<cords.length; i++){
cords[i][0]+=1;
}
placeCordsOnBoard();
}else{
checkComplete();
boolean fail=checkFail();
if(fail){
active=false;
fail();
}else{
setCords();
placeCordsOnBoard();
}
}
refreshBoard();
}
这是调用该函数的类Timer:
public class Scoring extends Thread{
public void run(){
System.out.println("pass here");
App a=new App();
if(a.getActive()){
try{
a.down();
Thread.sleep(1000);
run();
}catch(InterruptedException e){
System.out.println("Not pass");
}
}
}
}
答案 0 :(得分:0)
您正在递归调用run
方法。每次调用它时,都会创建一个新的App
实例。删除递归,以便每次调用down()
时,都会在同一对象上调用它。此外,如果您已在某处有App
个实例,则需要将其传递到Scoring
实例。
public class Scoring extends Thread {
private App a;
public Scoring(App a) {
this.a = a;
}
public void run() {
System.out.println("pass here");
while(true) {
if(a.getActive()) {
try {
a.down();
Thread.sleep(1000);
} catch(InterruptedException e){
System.out.println("Not pass");
}
}
}
}
}