2016-12-08 25 views
0

所以這裏是我的類遊戲,我需要它是一個運行和處理新遊戲。一旦我按下Jbutton newGame,一款新遊戲Jpanel應該開始存在,一個新的循環應該從一個小細節開始。每次我運行遊戲,完成它,再次將新遊戲放入KoniecHry 2中,一次使用正確的面板,一次使用面板值爲NULL並拋出空指針異常,同時JOptionPane對話是拋出兩次,第一次拋出前一次會話名稱,一次拋棄null 任何想法,我在哪裏複製這些實例?我實例化一個額外的重複,我不能找到它

public class Game extends JFrame { 
    public static final int SIRKA_OKNA = 1000; 
    public static final int VYSKA_OKNA = 600; 
    public static final int SIRKA_KARTY = SIRKA_OKNA/15; 
    public static final int VYSKA_KARTY = VYSKA_OKNA/10; 
    public static final int MEDZERA_OBJEKTOV = SIRKA_KARTY/20; 
    public static final int SIRKA_POSUVACA = SIRKA_KARTY/3; 
    private final ArrayList <JButton> mainMenu; 
    private final Font typPisma; 
    private static Game game; 
    private Table table; 
    private String nameOfTheWinner; 
    private Panel panel; 

    public static void main(String args[]){ 
     Game.game=new Game(); 
     game.setPreferredSize(new Dimension(Game.SIRKA_OKNA,Game.VYSKA_OKNA)); 
     game.setUndecorated(true); 
     game.setResizable(false); 
     game.pack(); 
     game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     game.setLocationRelativeTo(null); 
     game.setVisible(true); 
    } 

    public Game(){ 
     typPisma    = new Font("TimesRoman", Font.PLAIN, 10); 
     mainMenu    = new ArrayList<>(); 
     GridLayout rozlozenie = new GridLayout(6,2,50,50); 
     JButton newGame  = new JButton("New Game"); 
     JButton exitGame  = new JButton("Exit Game"); 

     this.setLayout(rozlozenie); 
     this.hlavneMenu.add(newGame); 
     this.add(newGame); 
     newGame.addActionListener(new ActionListener(){   
      @Override 
      public void actionPerformed(ActionEvent e) { 
       game.newGame(); 
       game.zmenStavMenu(false); 
      } 
     }); 

     hlavneMenu.add(exitGame); 
     this.add(exitGame); 
     exitGame.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e){ 
       System.exit(0); 
      } 
     }); 
    } 

    class Panel extends JPanel { 
     private Table table; 
     private Game game; 
     Panel(Table table,Game game) {   
      this.table= table; 
      this.game = game; 
      String menoPrvehoHraca = JOptionPane.showInputDialog(this,"Ako sa volá hráč č.1?"); 
      String menoDruhehoHraca = JOptionPane.showInputDialog(this,"Ako sa volá hráč č.2?"); 
      this.table= new table(this.game,this,10,menoPrvehoHraca,menoDruhehoHraca); 
      game.setLayout(new BorderLayout()); 
      game.add(this, BorderLayout.CENTER); 
      System.out.println("Vytvoril sa panel"); 
     } 

     public void paintComponent(Graphics g) { 

      if (this.table!= null) { 
       g.setFont(typPisma); 
       this.table.paint(g); 
      } 
      if(game.nameOfTheWinner!= null) { 
       g.setColor(Color.white); 
       g.fillRect(0, 0, Game.SIRKA_OKNA, Game.VYSKA_OKNA); 
      } 
     } 
    } 

    public void endOfTheGame(String nameOfTheWinner) { 
     JOptionPane.showMessageDialog(null,nameOfTheWinner+ " vyhral hru"); 
     this.nameOfTheWinner= nameOfTheWinner; 
     this.panel.repaint(); 
     this.table= null; 
     this.panel = null; 
     this.zmenStavMenu(true); 
    } 

    private void newGame(){ 
     this.panel = new Panel(this.table,this); 
     this.nameOfTheWinner= null; 
    } 

    private void changeState(boolean state) { 
     for(JButton currentButton: this.mainMenu){ 
      currentButton.setVisible(state); 
      currentButton.setEnabled(state); 
     } 
    }  
} 
+0

您似乎正在創建一個新的Panel對象,但是您沒有將它放到任何可以看到的GUI中。它只是掛在那裏。 –

+0

我用面板構造函數將它添加到框架中,我錯了嗎?用這個命令game.add(this,BorderLayout.CENTER); –

+0

啊,我明白了,它的代碼沒有顯示給我們,有些類叫做Stol。 –

回答

0

好吧,我發現了錯誤。我繼續有一個mouseListener的實例,它保持另一個不會停止存在的按鈕,所以當我第二次關閉遊戲中的兩個按鈕並且下一個按鈕開始時,問題是某些對象不再存在,所以我得到一個零點

相關問題