Jogo da velha: começar nova partida

Olá.
Eu quero q o programa nao termine depois de uma vitoria ou empate.

[code] /*
Jogo da velha

   Componentes:
   Daniel Farias
   Quelvin Morgado

 
 */

package jogodavelha2;
import javax.swing.*;// trabalha com janelas
import java.awt.*;
import java.awt.event.*;

/*'o java.awt.event.*' é usado para colocar eventos, por exemplo em
 botões, em fields, ou capturar cliques do mouse. Logo usa-se o pacote event,e
 pausar mais de uma classe desse pacote, se for por exemplo usar
 so uma, usa-se somente o nome da classe colocando no lugar do *.
 */

/*import java.awt.*; = Contém todas as classes para criação de interfaces do
 usuario, pintura, graficos e imagens.
 */

//JFrame é uma classe do pacote swing que representa uma janela

public class JogoVelha2 extends JFrame implements ActionListener {

/*A interface de ouvinte recebeeventos de ação. A classe que está interessada no
processamento de um evento de ação implementa essa interface, e o objeto criado
com essa classe é registrada com um componente, utilizando o método do
componente addActionListener. Quando o evento de ação ocorre,que o método
actionPerformed 's é invocado.
*/

       JButton bot1,bot2,bot3,bot4,bot5,bot6,bot7,bot8,bot9;
       int velha[][] = new int[3][3];//vetor multidi, para campos do jogo 3x3
       int i, j, jogada = 1, int_lapis, flag = 0, val1, val2, val3;
       String jogador1, jogador2, lapis;

       //flag -> Reconhece ganhador
        public JogoVelha2() {
        //classe é usada para a interface
                jogador1 = JOptionPane.showInputDialog("Digite o nome do 1º jogador");
                jogador2 = JOptionPane.showInputDialog("Digite o nome do 2º jogador");

                for(i=0;i<3;i++){
                        for(j=0;j<3;j++){
                                velha[i][j] = 0;
                        }
                }
                /*for acima cria os campos do layout
                 *
                 */

                
                setLayout(new GridLayout(3,3,5,5));/* define espaçamento e
                 alinhamento dos campos para prenchimento das jogadas do layout
                */

                //botões
                add(bot1 = new JButton(" "));
                add(bot2 = new JButton(" "));
                add(bot3 = new JButton(" "));
                add(bot4 = new JButton(" "));
                add(bot5 = new JButton(" "));
                add(bot6 = new JButton(" "));
                add(bot7 = new JButton(" "));
                add(bot8 = new JButton(" "));
                add(bot9 = new JButton(" "));


                //aplica uma ação sobre os botões
                bot1.addActionListener(this);
                bot2.addActionListener(this);
                bot3.addActionListener(this);
                bot4.addActionListener(this);
                bot5.addActionListener(this);
                bot6.addActionListener(this);
                bot7.addActionListener(this);
                bot8.addActionListener(this);
                bot9.addActionListener(this);
               
                setTitle("Jogo da velha ");//título da janela
                setSize(210,150);//alterar o tamanho janela
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/* para que a
                aplicação seja finalizada quando o usuario clicar no X da 
                janela, caso contrário depois de fechar a janela o 
                aplicativo continua rodando..*/


                            }
        
        

        public void actionPerformed(ActionEvent e) {
        //efetua ação sobre os botões
                if (jogada % 2 != 0){
                        lapis	   =  "X";
                        int_lapis   = 1;
                } else {
                        lapis =  "O";
                        int_lapis   = 2;
                }
/* lapis pode ser O ou X, sendo marcada em qualquer um dos nove campos do
 * vetor multidimensional "velha".
 */
                jogada += 1;//pra q isso?

                
                if (e.getSource() == bot1) {
                        bot1.setText(lapis);//  1.marca X ou O sobre o botão
                        bot1.setEnabled(false);//2.desativa o botão para a marcação
                        velha[0][0] = int_lapis;
                } else if (e.getSource() == bot2) {
                        bot2.setText(lapis);
                        bot2.setEnabled(false);
                        velha[0][1] = int_lapis;
                } else if (e.getSource() == bot3) {
                        bot3.setText(lapis);
                        bot3.setEnabled(false);
                        velha[0][2] = int_lapis;
                } else if (e.getSource() == bot4) {
                        bot4.setText(lapis);
                        bot4.setEnabled(false);
                        velha[1][0] = int_lapis;
                } else if (e.getSource() == bot5) {
                        bot5.setText(lapis);
                        bot5.setEnabled(false);
                        velha[1][1] = int_lapis;
                } else if (e.getSource() == bot6) {
                        bot6.setText(lapis);
                        bot6.setEnabled(false);
                        velha[1][2] = int_lapis;
                } else if (e.getSource() == bot7) {
                        bot7.setText(lapis);
                        bot7.setEnabled(false);
                        velha[2][0] = int_lapis;
                } else if (e.getSource() == bot8) {
                        bot8.setText(lapis);
                        bot8.setEnabled(false);
                        velha[2][1] = int_lapis;
                } else if (e.getSource() == bot9) {
                        bot9.setText(lapis);
                        bot9.setEnabled(false);
                        velha[2][2] = int_lapis;
                }

                //Os fors abaixo são todas as possibilidades de jogadas;

                //kd o for das jogadas horizontais?
                for (i=0;i<3;i++){

                        val1 = velha[0][i];
                        val2 = velha[1][i];
                        val3 = velha[2][i];


                     //possibilidades para jogadas na vertical

                        if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                                flag = 1;//determina vencedor 1
                        }

                        if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                                flag = 2;//determina vencedor 2
                        }
                                }

                for (i=0;i<3;i++){
                              //[linha][coluna]
                        val1 = velha[i][0];
                        val2 = velha[i][1];
                        val3 = velha[i][2];

                    //possibilades para jogadas na  horizontal


                     
                        if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                                flag = 1;
                        }

                        if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                                flag = 2;
                        }
                                }

                        val1   = velha[0][0];
                        val2   = velha[1][1];
                        val3   = velha[2][2];

             
                        /* ?|    |             ?=X ou O
                        *   | ?  |
                        *   |    |?

                        *Jogadas diagonal principal (esquerda para direita)
                        */


                if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                        flag = 1;
                                                                  }

                if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                        flag = 2;
                                                                  }

                val1   = velha[0][2];
                val2   = velha[1][1];
                val3   = velha[2][0];

                /*   |    |?            ?=X ou O
                 *   |  ? |
                 *  ?|    | 
            // possibilidade para a diagonal secundária (esquerda para a direita)
                 */

                if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                        flag = 1;//determina vencedor 1
                                                                  }

                if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                        flag = 2;//determina vencedor 2
                                                                  }

                if (flag !=0) {
                        if(flag == 1){
                                JOptionPane.showMessageDialog(this, jogador1
                                        + " ganhou!","Vencedor",JOptionPane.INFORMATION_MESSAGE);
                        } else if (flag == 2){
                                JOptionPane.showMessageDialog(this, jogador2
                                        + " ganhou!","Vencedor",JOptionPane.INFORMATION_MESSAGE);
                        }
                       System.exit(0);//finaliza o programa
                       /*Pra que usa-lo? Nesse caso, se nao for usado, mesmo
                       depois da vitoria do jogador 1ou2 o aplicativo
                       continuaria funcionando. Ou seja mesmo depois de um
                       vencedor daria empate */
                                  }

                if (jogada > 9){//se jogada for maior que nove, houve empate
                JOptionPane.showMessageDialog(null,"Deu velha!","Empate",
                JOptionPane.WARNING_MESSAGE);/*WARNING_MESSAGE, refere-se
                                              * ao tipo de mensagem, logo o
                                              * icone da janela será diferente
                                              */
                        System.exit(0);//fecha o aplicativo.

                }

                                }

        public static void main ( String args[]) {
            
             java.awt.EventQueue.invokeLater(new Runnable() {
             public void run() {
             new JogoVelha2().setVisible(true);
                           }
                                                            });

                                                }

}

[/code]

rapaz… do jeito que vc fez seu joguinho, a melhor solução seria colocar um while dentro do seu actionPerformed

o melhor seria separar neh… tirar tudo isso do action e colocar num método a parte… mas se nao quer alterar muito seu código, é só colocar um while antes mesmo do seu comentario "//efetua ação sobre os botões "


boolean jogoAtivo = true;

while ( jogoAtivo ) {
// seu codigo todo.. ideal seria chamar métodos para cada situação..
// assim, se o jogo acaba, ao invés de usar System.exit(0) no método, vc da um return e o método te joga pra ca
// dae vc pode exibir uma mensagem do tipo "jogar novamente?" que colocaria o jogoAtivo como false se a pessoa não quiser mais jogar
}
System.exit(0);

Tire dali o System.exit(0).
No lugar, vc pode mostrar um texto com um JOptionPane e zerar tudo para começar de novo.

Colocar o while dentro do ActionPerformed vai fazer seu jogo parar de ser desenhado.

obrigado@!