Jogo da velha com problemas no código?

Fiz esse código pensando em praticar um pouco o uso da interface gráfica que o Netbeans oferece, já que sou iniciante e estou tentando aprender mais, compliquei um pouco, utilizando a mudança de ícones e etc, mas esse não foi o grande problema. Aparentemente, todos os eventos parecem estar funcionando bem, mas não consigo entender porque o jogo da velha não mostra o resultado certo e anuncia ganhadores aleatórios em tempos aleatórios. O método jogada() foi implementado como action e o limpar() também, para começar um novo jogo.

Agradeço a quem puder analisar aquela parte da vitoria(), verificar() e me disser o que está errado. :slight_smile:

package japp;

import javax.swing.JButton;
import javax.swing.JOptionPane;

public class jvelha extends javax.swing.JFrame {

    private int jogador;
    private int qtdeJogadas;
    private int b[][] = new int[3][3];
    private JButton botoes[] = new JButton[9];   
    
    public jvelha() {
        initComponents();
        
        jogador = 1;
        qtdeJogadas = 0;
        
        botoes[0] = jButton1;
        botoes[1] = jButton2;
        botoes[2] = jButton3;
        botoes[3] = jButton4;
        botoes[4] = jButton5;
        botoes[5] = jButton6;
        botoes[6] = jButton7;
        botoes[7] = jButton8;
        botoes[8] = jButton9;       
    }

    public void jogada(JButton $botoes, int linha, int coluna) {
        
        $botoes.setEnabled(false);
        $botoes.setBorder(null);
        qtdeJogadas++;
        
        if (jogador==1) {

            $botoes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/japp/xis.jpg")));
            
            jogador = 2;
            
            verificar(1);
            
        }
        
        else {
            
            $botoes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/japp/bola.jpg")));
            
            jogador = 1;
            
            verificar(2);
            
        }
        
        b[linha][coluna] = jogador;
        
    }
    
    public void verificar(int $jogador){
        if(vitoria($jogador) == true) {
            JOptionPane.showMessageDialog(null, "O jogador "+$jogador+" ganhou a partida!", "Vitória", JOptionPane.INFORMATION_MESSAGE);
            terminar();
        }
        else if(qtdeJogadas == 9) {
            JOptionPane.showMessageDialog(null, "O jogo deu velha!", "Empate", JOptionPane.INFORMATION_MESSAGE);
        }
    }
    
    public boolean vitoria(int $jogador) {
        for (int i = 0; i < 3; i++) {
            if (b[i][0] == $jogador && b[i][1] == $jogador && b[i][2] == $jogador) {
                return (true);
            }
            if (b[0][i] == $jogador && b[1][i] == $jogador && b[2][i] == $jogador) {
                return (true);
            }
        }
        
        if(b[0][0] == $jogador && b[1][1] == $jogador && b[2][2] == $jogador){
            return (true);
        }
        if(b[2][0] == $jogador && b[1][1] == $jogador && b[0][2] == $jogador){
            return (true);
        }
        
        return (false);
    }
    
    public void terminar(){
        for(int i=0; i<9; i++) {
            botoes[i].setEnabled(false);
        }
    }
    
    public void limpar(){
        
        jogador = 1;
        qtdeJogadas = 0;
        
        for(int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                b[i][j] = 0;
            }
        }
        
        for(int i=0; i<9; i++) {
            botoes[i].setEnabled(true);
            botoes[i].setIcon(new javax.swing.ImageIcon(getClass().getResource("/japp/fundobot.jpg")));
            botoes[i].setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));
        }
    }

PROBLEMA RESOLVIDO.