title: I get StackOverflow error when I create new instance in external class
body: <p>I have my main class CalculatorGUI.java and my second class KeyHandler.java. If I create instance of my main class in external class (e.g. CalculatorGUI one = new CalculatorGUI();), I get:</p>
  
  <pre><code>Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
  </code></pre>
  
  <p>Why is that? I have to make this instance to use variables from y main GUI class.</p>
  
  <p>Here is my CalculatorGUI class:</p>
  
  <pre><code>/*
   * To change this license header, choose License Headers in Project Properties.
   * To change this template file, choose Tools | Templates
   * and open the template in the editor.
   */
  package gui;
  
  /**
   *
   * @author Michał
   */
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.KeyEvent;
  import java.awt.event.KeyListener;
  import javax.swing.*;
  
  public class CalculatorGUI extends javax.swing.JFrame {
  
      public CalculatorGUI() {
          initComponents();
      }
  
      private String value = "";
  
      public void symbolControl(String s) {
          //String str = String.valueOf(s);
          boolean result;
          result = value.endsWith(s);
          if (result == true) {
              int length = value.length();
              value = value.substring(0, length - 1);
          }
      }
  
      public void setValue(String s) {
          value = s;
      }
  
      public String getValue() {
          return value;
      }
  
      public void print(JButton b) {
          value = value + b.getText();
          jTextField1.setText(value);
      }
  
      KeyHandler keyboard = new KeyHandler();
  
      /**
       * This method is called from within the constructor to initialize the form.
       * WARNING: Do NOT modify this code. The content of this method is always
       * regenerated by the Form Editor.
       */
      @SuppressWarnings("unchecked")
      // &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt;                          
      private void initComponents() {
  
          jTextField1 = new javax.swing.JTextField();
          one = new javax.swing.JButton();
          two = new javax.swing.JButton();
          three = new javax.swing.JButton();
          four = new javax.swing.JButton();
          five = new javax.swing.JButton();
          six = new javax.swing.JButton();
          seven = new javax.swing.JButton();
          eight = new javax.swing.JButton();
          nine = new javax.swing.JButton();
          zero = new javax.swing.JButton();
          comma = new javax.swing.JButton();
          multiply = new javax.swing.JButton();
          plus = new javax.swing.JButton();
          equals = new javax.swing.JButton();
          divide = new javax.swing.JButton();
          minus = new javax.swing.JButton();
          del = new javax.swing.JButton();
          lBracket = new javax.swing.JButton();
          rBracket = new javax.swing.JButton();
  
          setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
          setTitle("Kalkulator");
  
          jTextField1.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  jTextField1ActionPerformed(evt);
              }
          });
  
          one.setText("1");
          one.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  oneActionPerformed(evt);
              }
          });
          one.addKeyListener(new java.awt.event.KeyAdapter() {
              public void keyPressed(java.awt.event.KeyEvent evt) {
                  oneKeyPressed(evt);
              }
          });
  
          two.setText("2");
          two.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  twoActionPerformed(evt);
              }
          });
  
          three.setText("3");
          three.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  threeActionPerformed(evt);
              }
          });
  
          four.setText("4");
          four.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  fourActionPerformed(evt);
              }
          });
  
          five.setText("5");
          five.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  fiveActionPerformed(evt);
              }
          });
  
          six.setText("6");
          six.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  sixActionPerformed(evt);
              }
          });
  
          seven.setText("7");
          seven.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  sevenActionPerformed(evt);
              }
          });
  
          eight.setText("8");
          eight.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  eightActionPerformed(evt);
              }
          });
  
          nine.setText("9");
          nine.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  nineActionPerformed(evt);
              }
          });
  
          zero.setText("0");
          zero.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  zeroActionPerformed(evt);
              }
          });
  
          comma.setText(".");
          comma.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  commaActionPerformed(evt);
              }
          });
  
          multiply.setText("*");
          multiply.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  multiplyActionPerformed(evt);
              }
          });
  
          plus.setText("+");
          plus.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  plusActionPerformed(evt);
              }
          });
  
          equals.setText("=");
          equals.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  equalsActionPerformed(evt);
              }
          });
  
          divide.setText("/");
          divide.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  divideActionPerformed(evt);
              }
          });
  
          minus.setText("-");
          minus.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  minusActionPerformed(evt);
              }
          });
  
          del.setText("&lt;---");
          del.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  delActionPerformed(evt);
              }
          });
  
          lBracket.setText("(");
          lBracket.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  lBracketActionPerformed(evt);
              }
          });
  
          rBracket.setText(")");
          rBracket.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  rBracketActionPerformed(evt);
              }
          });
  
          javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
          getContentPane().setLayout(layout);
          layout.setHorizontalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
                  .addContainerGap()
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                      .addComponent(jTextField1)
                      .addGroup(layout.createSequentialGroup()
                          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                              .addComponent(four, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(seven, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(zero, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(one, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                              .addComponent(two, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(five, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(eight, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(comma, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                              .addComponent(nine, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(six, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                              .addComponent(three, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                          .addGap(18, 18, 18)
                          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                              .addGroup(layout.createSequentialGroup()
                                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                      .addComponent(lBracket, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                      .addComponent(plus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                      .addComponent(del, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                      .addComponent(rBracket, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                      .addComponent(minus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                      .addComponent(equals, javax.swing.GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)))
                              .addGroup(layout.createSequentialGroup()
                                  .addComponent(multiply, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                  .addComponent(divide, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
          );
          layout.setVerticalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
                  .addContainerGap()
                  .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(one)
                      .addComponent(two)
                      .addComponent(three)
                      .addComponent(multiply)
                      .addComponent(divide))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(four)
                      .addComponent(five)
                      .addComponent(six)
                      .addComponent(plus)
                      .addComponent(minus))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(seven)
                      .addComponent(eight)
                      .addComponent(nine)
                      .addComponent(lBracket)
                      .addComponent(rBracket))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(zero)
                      .addComponent(comma)
                      .addComponent(del)
                      .addComponent(equals))
                  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
          );
  
          pack();
      }// &lt;/editor-fold&gt;                        
  
      private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
          // TODO add your handling code here:
      }                                          
  
      private void equalsActionPerformed(java.awt.event.ActionEvent evt) {                                      
      }                                      
  
      private void oneActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(one);
      }                                  
  
      private void twoActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(two);
      }                                  
  
      private void threeActionPerformed(java.awt.event.ActionEvent evt) {                                      
          print(three);
      }                                    
  
      private void fourActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(four);
      }                                    
  
      private void fiveActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(five);
      }                                    
  
      private void sixActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(six);
      }                                  
  
      private void sevenActionPerformed(java.awt.event.ActionEvent evt) {                                      
          print(seven);
      }                                    
  
      private void eightActionPerformed(java.awt.event.ActionEvent evt) {                                      
          print(eight);
      }                                    
  
      private void nineActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(nine);
      }                                    
  
      private void zeroActionPerformed(java.awt.event.ActionEvent evt) {                                    
          print(zero);
      }                                    
  
      private void commaActionPerformed(java.awt.event.ActionEvent evt) {                                      
          String[] symbolArray = {"..", "+.", "-.", "*.", "/.", "(.", ")."};
  
          value = value + comma.getText();
          for (String symbolArray1 : symbolArray) {
              symbolControl(symbolArray1);
          }
          jTextField1.setText(value);
      }                                    
  
      private void multiplyActionPerformed(java.awt.event.ActionEvent evt) {                                        
          String symbol1 = "**";
          String symbol2 = ".*";
          value = value + multiply.getText();
          symbolControl(symbol1);
          symbolControl(symbol2);
          jTextField1.setText(value);
      }                                        
  
      private void divideActionPerformed(java.awt.event.ActionEvent evt) {                                      
          String symbol1 = "//";
          String symbol2 = "./";
          value = value + divide.getText();
          symbolControl(symbol1);
          symbolControl(symbol2);
          jTextField1.setText(value);
      }                                      
  
      private void plusActionPerformed(java.awt.event.ActionEvent evt) {                                    
          String symbol1 = "++";
          String symbol2 = ".+";
          value = value + plus.getText();
          symbolControl(symbol1);
          symbolControl(symbol2);
          jTextField1.setText(value);
      }                                    
  
      private void minusActionPerformed(java.awt.event.ActionEvent evt) {                                      
          String symbol1 = "--";
          String symbol2 = ".-";
          value = value + minus.getText();
          symbolControl(symbol1);
          symbolControl(symbol2);
          jTextField1.setText(value);
      }                                    
  
      private void delActionPerformed(java.awt.event.ActionEvent evt) {                                    
          int length = value.length();
          String parametr = value.substring(0, length - 1);
          value = parametr;
          jTextField1.setText(value);
      }                                  
  
      private void lBracketActionPerformed(java.awt.event.ActionEvent evt) {                                        
          String symbol1 = ")(";
          String symbol2 = ".(";
          value = value + lBracket.getText();
          symbolControl(symbol1);
          symbolControl(symbol2);
          jTextField1.setText(value);
      }                                        
  
      private void rBracketActionPerformed(java.awt.event.ActionEvent evt) {                                        
          String symbol1 = ".)";
          String symbol2 = "()";
          value = value + rBracket.getText();
          symbolControl(symbol1);
          symbolControl(symbol2);
          jTextField1.setText(value);
      }                                        
  
      private void oneKeyPressed(java.awt.event.KeyEvent evt) {                              
          // TODO add your handling code here:
      }                              
  
      /**
       * @param args the command line arguments
       */
      public static void main(String args[]) {
          /* Set the Nimbus look and feel */
          //&lt;editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "&gt;
          /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
           * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
           */
          try {
              for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                  if ("Nimbus".equals(info.getName())) {
                      javax.swing.UIManager.setLookAndFeel(info.getClassName());
                      break;
                  }
              }
          } catch (ClassNotFoundException ex) {
              java.util.logging.Logger.getLogger(CalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          } catch (InstantiationException ex) {
              java.util.logging.Logger.getLogger(CalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          } catch (IllegalAccessException ex) {
              java.util.logging.Logger.getLogger(CalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          } catch (javax.swing.UnsupportedLookAndFeelException ex) {
              java.util.logging.Logger.getLogger(CalculatorGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
          }
          //&lt;/editor-fold&gt;
  
          /* Create and display the form */
          java.awt.EventQueue.invokeLater(new Runnable() {
              @Override
              public void run() {
                  new CalculatorGUI().setVisible(true);
              }
          });
      }
  
  
      // Variables declaration - do not modify                    
      private javax.swing.JButton comma;
      private javax.swing.JButton del;
      private javax.swing.JButton divide;
      private javax.swing.JButton eight;
      private javax.swing.JButton equals;
      private javax.swing.JButton five;
      private javax.swing.JButton four;
      private javax.swing.JTextField jTextField1;
      private javax.swing.JButton lBracket;
      private javax.swing.JButton minus;
      private javax.swing.JButton multiply;
      private javax.swing.JButton nine;
      public javax.swing.JButton one;
      private javax.swing.JButton plus;
      private javax.swing.JButton rBracket;
      private javax.swing.JButton seven;
      private javax.swing.JButton six;
      private javax.swing.JButton three;
      private javax.swing.JButton two;
      private javax.swing.JButton zero;
      // End of variables declaration                  
  }
  </code></pre>
  
  <p>KayHandler.java:</p>
  
  <pre><code>package gui;
  
  import java.awt.event.KeyEvent;
  import java.awt.event.KeyListener;
  
  
  
  public class KeyHandler implements KeyListener {
  
      CalculatorGUI elo = new CalculatorGUI();
  
      /** Handle the key typed event from the text field. */
      @Override
      public void keyTyped(KeyEvent e) {
  
      }
  
      /** Handle the key-pressed event from the text field. */
      @Override
      public void keyPressed(KeyEvent e) {
  
      }
  
      /** Handle the key-released event from the text field. */
      @Override
      public void keyReleased(KeyEvent e) {
  
      }
  </code></pre>