2013-10-24 2 views
1

У меня есть проект Java (игра Tetris), который я импортировал в другой проект. В основном я хочу запустить игру с простого нажатия кнопки (в NetBeans JFrame, а не в классе).Запуск основного класса из другого класса с помощью JButton

я могу заставить его работать так:

public static void main(String args[]) 
{ 
    TicTacToe.main(args) 
} 

Он отлично работает, но когда я пытаюсь в случае нажатия кнопки:

private void TetrisButtonActionPerformed(java.awt.event.ActionEvent evt) {  
    TicTacToe.main(new String[0]);   
} 

это дает мне пустой кадр, я подумал, может быть это аргумент, так как он работает в основном методе просто отлично, поэтому я создал переменную и метод для возврата аргументов из основного метода, но это не устранило проблему.

Любые советы или объяснения причин, по которым он не может работать?

Полный код:

package tictactoe; 

import java.awt.Component; 
import javax.swing.JOptionPane; 

public class TicTacToe { 

    public static boolean playerTurn = true; 
    public static boolean playerWon = false; 
    public static boolean computerWon = false; 
    public static boolean playgame = true; 

    public static game board = new game(); 

    public static void main(String[] args) { 

     //startGame(); 

     while(playgame == true) 
     { 
      if(board.isVisible() == false) 
      { 
       board.setVisible(true); 
      } 
     } 

    } 


    public static void checkforwin() 
    { 

     //player win 
     if(board.button1.getText().equals("X")) 
     { 
      if(board.button4.getText().equals("X")) 
      { 
       if(board.button7.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

     if(board.button1.getText().equals("X")) 
     { 
      if(board.button5.getText().equals("X")) 
      { 
       if(board.button9.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

      if(board.button1.getText().equals("X")) 
     { 
      if(board.button2.getText().equals("X")) 
      { 
       if(board.button3.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

      if(board.button3.getText().equals("X")) 
     { 
      if(board.button5.getText().equals("X")) 
      { 
       if(board.button7.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

      if(board.button3.getText().equals("X")) 
     { 
      if(board.button6.getText().equals("X")) 
      { 
       if(board.button9.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

      if(board.button7.getText().equals("X")) 
     { 
      if(board.button8.getText().equals("X")) 
      { 
       if(board.button9.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

       if(board.button4.getText().equals("X")) 
     { 
      if(board.button5.getText().equals("X")) 
      { 
       if(board.button6.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
         JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

       if(board.button2.getText().equals("X")) 
     { 
      if(board.button5.getText().equals("X")) 
      { 
       if(board.button8.getText().equals("X")) 
        { 
         playerWon = true; 
         computerWon = false; 
        JOptionPane.showMessageDialog(null, "Player won!"); 
        } 
      } 
     } 

       //computer won 
       if(board.button1.getText().equals("O")) 
     { 
      if(board.button4.getText().equals("O")) 
      { 
       if(board.button7.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

         if(board.button1.getText().equals("O")) 
     { 
      if(board.button5.getText().equals("O")) 
      { 
       if(board.button9.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

          if(board.button1.getText().equals("O")) 
     { 
      if(board.button2.getText().equals("O")) 
      { 
       if(board.button3.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

            if(board.button3.getText().equals("O")) 
     { 
      if(board.button5.getText().equals("O")) 
      { 
       if(board.button7.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

              if(board.button3.getText().equals("O")) 
     { 
      if(board.button6.getText().equals("O")) 
      { 
       if(board.button9.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

          if(board.button7.getText().equals("O")) 
     { 
      if(board.button8.getText().equals("O")) 
      { 
       if(board.button9.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

                 if(board.button4.getText().equals("O")) 
     { 
      if(board.button5.getText().equals("O")) 
      { 
       if(board.button6.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

                   if(board.button2.getText().equals("O")) 
     { 
      if(board.button5.getText().equals("O")) 
      { 
       if(board.button8.getText().equals("O")) 
        { 
         playerWon = false; 
         computerWon = true; 
         JOptionPane.showMessageDialog(null, "Computer won!"); 
        } 
      } 
     } 

     if(playerWon == true || computerWon == true) 
     { 
      board.setVisible(false); 
      int dialogresult = JOptionPane.showConfirmDialog(null, "Désirez vous jouer une autre partie? ","test",JOptionPane.YES_NO_OPTION); 


      //ask user to select if he want to begin a new game 
      if(dialogresult == JOptionPane.YES_OPTION) 
      { 

       playerWon = false; 
       computerWon = false; 

       board.setVisible(true); 

       board.button1.setText(""); 
       board.button2.setText(""); 
       board.button3.setText(""); 
       board.button4.setText(""); 
       board.button5.setText(""); 
       board.button6.setText(""); 
       board.button7.setText(""); 
       board.button8.setText(""); 
       board.button9.setText(""); 


      } 
      else 
      { 
       playgame = false; 
      } 
     } 


    } 

    public static void startGame() 
    { 


     while(playgame == true) 
     { 
      if(board.isVisible() == false) 
      { 
       board.setVisible(true); 
      } 
     } 
    } 
} 
public class game extends JFrame{ 

    JButton button1 = new JButton(); 
    JButton button2 = new JButton(); 
    JButton button3 = new JButton(); 
    JButton button4 = new JButton(); 
    JButton button5 = new JButton(); 
    JButton button6 = new JButton(); 
    JButton button7 = new JButton(); 
    JButton button8 = new JButton(); 
    JButton button9 = new JButton(); 

    TicTacToe ttt = new TicTacToe(); 

    public game() 
    { 
     initComponents(); 
     button1.setText(""); 
     button2.setText(""); 
     button3.setText(""); 
     button4.setText(""); 
     button5.setText(""); 
     button6.setText(""); 
     button7.setText(""); 
     button8.setText(""); 
     button9.setText(""); 
    } 

     private void button1ActionPerformed(ActionEvent e) { 
       if(button1.getText().equals("")); 
       { 
        if(TicTacToe.playerTurn == true) 
        { 
         button1.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button1.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
       } 
     } 

     private void button2ActionPerformed(ActionEvent e) { 
        if(TicTacToe.playerTurn == true) 
        { 
         button2.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button2.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button3ActionPerformed(ActionEvent e) { 
        if(TicTacToe.playerTurn == true) 
        { 
         button3.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button3.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button4ActionPerformed(ActionEvent e) { 
        if(TicTacToe.playerTurn == true) 
        { 
         button4.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button4.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button5ActionPerformed(ActionEvent e) { 
       if(TicTacToe.playerTurn == true) 
        { 
         button5.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button5.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button6ActionPerformed(ActionEvent e) { 
        if(TicTacToe.playerTurn == true) 
        { 
         button6.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button6.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button7ActionPerformed(ActionEvent e) { 
        if(TicTacToe.playerTurn == true) 
        { 
         button7.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button7.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button8ActionPerformed(ActionEvent e) { 
       if(TicTacToe.playerTurn == true) 
        { 
         button8.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button8.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 

     private void button9ActionPerformed(ActionEvent e) { 
        if(TicTacToe.playerTurn == true) 
        { 
         button9.setText("X"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = false; 
        } 
        else 
        { 
         button9.setText("O"); 
         TicTacToe.checkforwin(); 
         TicTacToe.playerTurn = true; 
        } 
     } 
+5

английский язык прекрасный. Покажите нам код в 'Tetris.main (args)', хотя, пожалуйста. – christopher

+0

здесь: public static void main (String [] args) { \t \t Tetris tetris = new Tetris(); \t \t tetris.startGame(); \t} – math487

+1

Измените его в своем вопросе, а затем покажите нам * код, заполняющий JFrame *. – christopher

ответ

6

Это проблематично кусок кода:

while(playgame == true) 
{ 
    if(board.isVisible() == false) 
    { 
     board.setVisible(true); 
    } 
} 

При вызове от слушателя действия, вы в диспетчерский потока событий. Этот код работает в цикле, когда playgame прав, никогда не позволяя ему вернуться обратно к EDT, чтобы он мог сделать рисунок.

Вы главный должны выглядеть примерно так вместо того, чтобы:

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      // Create board here, if needed 
      createBoard(); 
      board.setVisible(true); 
      // start a new game here 
      startGame(); 
     } 
    }); 
} 

invokeLater() толкает код на диспетчерском поток событий, который требуется для нарезания безопасного доступа и создания свинга компонентов, так что не пропустите что даже если ваш код работает без него.

Кроме того, это может быть более чистым, если вы просто не вызвали main() из прослушивателя действий, а просто метод, который запускает новую игру.

+0

большое спасибо !! но мне все еще интересно, почему TicTacToe.main() работает в другом основном методе, но не где-нибудь еще? – math487

+1

@ math487, когда 'main()' вызывается как точка входа в программу, это * не * в EDT.Таким образом, небезопасная инициализация потока помогает программе запускать: заблокированный поток в цикле является основным потоком, тогда как EDT может запускать GUI-код. – kiheru

0

Я не уверен, что если вам нужно больше, чем один "основной" метод в вашем проекте. Возможно, вы должны использовать конструктор по умолчанию.

private void TetrisButtonActionPerformed(java.awt.event.ActionEvent evt) {  
     new Tetris(); 
    } 
Смежные вопросы