2015-07-23 2 views
3

Это класс Gui.JAVA - класс и объект, супер

import java.awt.BorderLayout; 
import javax.swing.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.beans.PropertyChangeListener; 
import javax.swing.JButton; 

public class Gui extends JFrame{ 
    Principal obiect; 
    public JButton heads = new JButton("Heads"); 
    public JButton tails = new JButton("Tails"); 
    public static JTextField display; 
    public JTextField comboul; 
    public JPanel panel = new JPanel(); 
    public int predictie; 


    public Gui(){ 
     super("HeadsOrTails"); 
     panel.setLayout(new BorderLayout(100, 100)); 
     panel.add(heads,BorderLayout.LINE_START); 
     panel.add(tails,BorderLayout.LINE_END); 
     panel.add(display,BorderLayout.CENTER); //HERE IS ERROR 
     panel.add(comboul,BorderLayout.PAGE_START); 
    } 


    public void dacaHeads(){ 
     if(heads.getModel().isPressed()) predictie = 0; 
    } 
    public void dacaTails(){ 
     if(tails.getModel().isPressed()) predictie = 1; 



     heads.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e){ 
       dacaHeads(); 
       obiect.flip(); 

       if(predictie == obiect.returnStatus()){ 
        String s = comboul.getText(); 
        int combo = Integer.valueOf(s); 
        s = Integer.toString(++combo); 
        comboul.setText(s);} 
        else{ 
         String z = "0"; 
         comboul.setText(z); 
        } 
      } 
     }); 
     tails.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
       dacaTails(); 
       obiect.flip(); 
       if(predictie == obiect.returnStatus()){ 
        String s = comboul.getText(); 
        int combo = Integer.valueOf(s); 
        s = Integer.toString(++combo); 
        comboul.setText(s);} 
       else{ 
         String z = "0"; 
       comboul.setText(z); 
      } 
     } 
     }); 



    }} 

Это класс Principal.

import javax.swing.*; 
import java.util.Random; 
    public class Principal extends Gui { 
    public int combo; 
    public static Random bulion = new Random(); 
    public static boolean sansa; 
    public static boolean input; 
    public int status; 

    //STATUS 0 = HEADS; 
    //STATUS 1 = TAILS; 

     public static void main(String[] args) { 
      Gui lee = new Gui(); //HERE IS ERROR 
      Principal obiect = new Principal(); 
      lee.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      lee.setSize(500,500); 
      lee.setVisible(true); 
     } 

     public int flip(){ 
     boolean sansa2 ; 
     sansa2 = bulion.nextBoolean(); 
     if(sansa2){ 
      status = 0; 
      display.setText("Heads"); 
     } 
     else{ 
      status = 1; 
      display.setText("Tails"); 
     } 
     return status; 

    } 

    public int returnStatus(){ 
     return status; 
    } 
} 

Эти ошибки: ИСПРАВЛЕНО:. // Исключение в потоке "основного" java.lang.StackOverflowError // в Гуй (Gui.java:19) // Супер // в Principal . (Principal.java:3) // класс Principal общественности расширяет Гуй // в Гуй. (Gui.java:9) // Principal obiect = новый Principal()

NOW: 
Exception in thread "main" java.lang.NullPointerException 
at Gui.<init>(Gui.java:23) 
at Principal.main(Principal.java:14) 

Это мой первый пост, так что я извините, если вы не понимаете. Я буду размещать дополнительную информацию, если вам нужно.

+0

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

ответ

5

При создании Gui экземпляр, он создает Principal экземпляр (поскольку Gui класс имеет переменную с Prinicipal экземпляра - Principal obiect = new Principal();), который также является Gui экземпляр, так что вы получите бесконечную цепочку вызова конструктора, что приводит к StackOverflowError.

Для того, чтобы избежать его изменить

Principal obiect = new Principal(); 

к

Principal obiect; 

и инициализировать этот экземпляр после создания экземпляра Gui (т.е. после вызова Gui lee = new Gui(); в вашей основной метод).

Например, добавить в Gui класс:

public void setPrincipal (Principal object) 
{ 
    this.object = object; 
} 

И ваш главный:

Gui lee = new Gui(); 
lee.setPrincipal (new Principal()); 
+0

О, я не знал этого. Теперь я думаю, что понял, что такое StackOverflowError. – AlexSS

+0

Но теперь у меня есть эти ошибки: Исключение в потоке «main» java.lang.NullPointerException .at Gui. (Gui.java:23) \t в Principal.main (Principal.java:14). – AlexSS

+0

Вот первая ошибка: panel.add (display, BorderLayout.CENTER); , И вторая ошибка: Gui lee = new Gui() ;. – AlexSS

Смежные вопросы