来自另一个类的Java调用函数无法正常工作。

时间:2017-04-18 21:38:08

标签: java function class

当我从我的评分课“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");
            }
        }
    }
}

1 个答案:

答案 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");
                }
            }
        }
    }
}