Salve a tutti ho un problema con questo programma in Java: quando vince il giocatore o vince il computer il settaggio della variabile "static boolean vinto" a true (così da non far più inserire nulla) non avviene, nonostante io richiami la funzione. Vi allego qui sotto le tre classi così da potermi aiutare a capire meglio:
CLASSE PRINCIPALE (con main)
codice:
import java.io.*;
public class Gioco {
    public static void main() {
        BufferedReader t=new BufferedReader(new InputStreamReader(System.in));
        char scelta, avv;
        int n=0, r, c, nav, ctTurni=0;
        System.out.println("Inserisci 0 per X, 1 per O: ");
        try {
            String s=t.readLine();
            n=Integer.parseInt(s);
        }
        catch (Exception e) {
            System.out.println("Errore, scelta non numerica!");
        }
        
        if(n==0) {
            scelta='X';
            avv='O';
            nav=1;
        }
        else {
            scelta='O';
            avv='X';
            nav=0;
        }
        
        
        Schema m=new Schema();
        
        do {
            ctTurni++;
            m.faiMossa(scelta);
            Thread Vince1[]=new Thread[8];
        
            for (int ct=0; ct<8; ct++) {
                Vince1[ct]=new ThreadTris(n, m, scelta);
                Vince1[ct].start();
            }
            //stampa status variabile vinto
            System.out.println(m.getVinto());
            if(m.getVinto()==false) {
                ctTurni++;
                m.mossaAvv(avv);
            
                Thread Vince2[]=new Thread[8];
        
                for (int ct=0; ct<8; ct++) {
                    Vince2[ct]=new ThreadTris(nav, m, avv);
                    Vince2[ct].start();
                }
            }
            //System.out.println("\f");
            m.vedi();
        }while(m.getVinto()==false);
        
        
        System.out.println("\nVince "+m.getVincitore());
    }
}
CLASSE DI CONTROLLO (thread)
codice:
public class ThreadTris extends Thread {    int t, n;
    char scelta;
    protected Schema m=null;
    static char car[]=new char[2];
        
    public ThreadTris(int turno, Schema m, char s) {
        this.m=m;
        this.t=turno;
        this.scelta=s;
    }
    
    public void run() {
        if(m.getVinto()) {
            this.yield();
        }
        
        if(m.matrice[0][0]==m.matrice[0][1] && m.matrice[0][0]==m.matrice[0][2]) {
            vittoria();
        }
        
        if(m.matrice[1][0]==m.matrice[1][1] && m.matrice[1][0]==m.matrice[1][2]) {
            vittoria();
        }
        
        if(m.matrice[2][0]==m.matrice[2][1] && m.matrice[2][0]==m.matrice[2][2]) {
            vittoria();
        }
        
        if(m.matrice[0][0]==m.matrice[1][0] && m.matrice[0][0]==m.matrice[2][0]) {
            vittoria();
        }
        
        if(m.matrice[0][1]==m.matrice[1][1] && m.matrice[0][1]==m.matrice[2][1]) {
            vittoria();
        }
        
        if(m.matrice[0][2]==m.matrice[1][2] && m.matrice[0][2]==m.matrice[2][2]) {
            vittoria();
        }
        
        if(m.matrice[0][0]==m.matrice[1][1] && m.matrice[0][0]==m.matrice[2][2]) {
            vittoria();
        }
        
        if(m.matrice[0][2]==m.matrice[1][1] && m.matrice[0][2]==m.matrice[2][0]) {
            vittoria();
        }
    }
    
    public void vittoria() {
        m.setVincitore(scelta);
        m.setVinto();
    }
    
}
CLASSE DEL CAMPO
codice:
import java.util.Random;
import java.io.*;
public class Schema {
    static char matrice[][]=new char[3][3];
    static boolean vinto;
    static char vincitore;
    BufferedReader t=new BufferedReader(new InputStreamReader(System.in));
    
    public Schema() {
        matrice[0][0]='?';
        matrice[0][1]='?';
        matrice[0][2]='?';
        matrice[1][0]='?';
        matrice[1][1]='?';
        matrice[1][2]='?';
        matrice[2][0]='?';
        matrice[2][1]='?';
        matrice[2][2]='?';
        vinto=false;
        vedi();
    }
    
    public boolean getVinto() {
        return vinto;
    }
    
    public synchronized void setVinto() {
        this.vinto=vinto;
    }
    
    public synchronized void setVincitore(char segno) {
        this.vincitore=segno;
    }
    
    public char getVincitore() {
        return vincitore;
    }
    
    public void faiMossa(char scelta) {
        int r=0, c=0;
        
        do {
            
            System.out.println("\nInserisci la righa: ");
            try {
                String s=t.readLine();
                r=Integer.parseInt(s);
            }
            catch (Exception e) {
                System.out.println("Errore, scelta non numerica!");
            }
            
            System.out.println("Inserisci la colonna: ");
            try {
                String s=t.readLine();
                c=Integer.parseInt(s);
            }
            
            catch (Exception e) {
                System.out.println("Errore, scelta non numerica!");
            }
            
            if(matrice[r][c]!='?') {
                System.out.println("Errore, casella occupata!");
            }
        }while(matrice[r][c]!='?');
        matrice[r][c]=scelta;
    }
    
    public void mossaAvv(char avv) {
        Random rnd=new Random();
        int r=0, c=0;
        do {
            r=rnd.nextInt(3);
            c=rnd.nextInt(3);
        }while(matrice[r][c]!='?');
        matrice[r][c]=avv;
    }
    
    public void vedi() {
        for(int r=0; r<3; r++) {
            for(int c=0; c<3; c++) {
                System.out.print(" "+matrice[r][c]+" ");
                if(c!=2) {
                    System.out.print("|");
                }
            }
            if(r!=2) {
                System.out.println("\n-----------");
            }
        }
    }
}
Grazie in anticipo a tutti per l'aiuto