1

I am working on my homework assignment. I have a main class that uses the following call to access the following JSplash class.

JSplash splash = new JSplash();

However when I use that in my main method to create a frame with the JSplash class it compiles....but no window comes up. I cannot understand what I am doing incorrectly.

The DFrame class it implements is a class I created as an extension of JFrame I will post it at the bottom of this code as well

package InventoryApp;

//Import
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 *
 * @author Curtis
 */
public class JSplash extends DFrame implements ActionListener
{
//declaration of variable objects
Font myFont = new Font("Arial", Font.BOLD, 20);
JButton myButton = new JButton("Click Me!");
Color bgColor = new Color(0,0,255);
Color firstColor = new Color(255,255,255);
String first = "Welcome to DaemoDynamics!";
String last = "Click the Button";
String middle = "";
String middle2 = "";
private static int count = 1;  
JSplash frame = new JSplash();
//Constructor
public JSplash()
        {
            setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            setLayout (new BorderLayout());
            add(myButton, BorderLayout.SOUTH);
            setDefaultLookAndFeelDecorated(true);
            getContentPane().setBackground(bgColor);
            //adds action listener
            myButton.addActionListener(this);
            final int TALL = 316;
            final int WIDE = 304;
            frame.setSize(WIDE, TALL);
            frame.setVisible(true);
        }
//Paint method
@Override
public void paint(Graphics e)
{
    super.paint(e);
    e.setFont(myFont);
    e.setColor(firstColor);
    e.drawString(first, 14, 80);
    e.drawString(last, 70, 240);
    e.drawString(middle, 75, 150);
    e.drawString(middle2, 60, 175);
}

//Listener Method
@Override
public void actionPerformed(ActionEvent e) 
{
    //First Time button hit
    if(count == 1)
    {
        middle = "Brighter Business";
            middle2 = "for A Brighter Future";
            last = "Click Again to Begin";
            repaint();
        //increases button count
        count ++;
    }
    else//if button count is not 1
    {
        frame.setVisible(false);
        FinalProject app = new FinalProject();
    }  
}
}

Now, the following code is my DFrame class. It works properly when I use it with other classes.

package InventoryApp;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JFrame;

/**
 *
 * @author Curtis
 */
public class DFrame extends JFrame
{
//variables
final int WIDE = 304;
final int HIGH = 316;
String x = "";
Container con = getContentPane();
//frame constructor
public DFrame()
{
    super("Item Inventory Application");
    setSize(WIDE, HIGH);
    setDefaultLookAndFeelDecorated(true);
    con.setBackground(Color.BLUE);
    con.setLayout(new FlowLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

errors:

    Exception in thread "main" java.lang.StackOverflowError
    at java.util.HashMap.get(HashMap.java:317)
    at java.awt.VKCollection.findCode(AWTKeyStroke.java:885)
    at java.awt.AWTKeyStroke.getVKValue(AWTKeyStroke.java:613)
    at java.awt.AWTKeyStroke.getAWTKeyStroke(AWTKeyStroke.java:568)
    at javax.swing.KeyStroke.getKeyStroke(KeyStroke.java:310)
    at javax.swing.LookAndFeel.loadKeyBindings(LookAndFeel.java:436)
    at javax.swing.LookAndFeel.makeComponentInputMap(LookAndFeel.java:388)
    at javax.swing.plaf.basic.BasicMenuBarUI.getInputMap(BasicMenuBarUI.java:120)
    at  
    javax.swing.plaf.basic.BasicMenuBarUI.installKeyboardActions(BasicMenuBarUI.java:106)
    at javax.swing.plaf.basic.BasicMenuBarUI.installUI(BasicMenuBarUI.java:75)
    at javax.swing.plaf.metal.MetalMenuBarUI.installUI(MetalMenuBarUI.java:65)
    at javax.swing.JComponent.setUI(JComponent.java:664)
    at javax.swing.JMenuBar.setUI(JMenuBar.java:136)
    at javax.swing.JMenuBar.updateUI(JMenuBar.java:145)
    at javax.swing.JMenuBar.<init>(JMenuBar.java:113)
    at javax.swing.plaf.metal.MetalTitlePane$SystemMenuBar.<init>  
    ( MetalTitlePane.java:846)
    at javax.swing.plaf.metal.MetalTitlePane$SystemMenuBar.<init>
    (MetalTitlePane.java:846)
    at javax.swing.plaf.metal.MetalTitlePane.createMenuBar(MetalTitlePane.java:364)
    at
    javax.swing.plaf.metal.MetalTitlePane.installSubcomponents(MetalTitlePane.java:279)
    at javax.swing.plaf.metal.MetalTitlePane.<init>(MetalTitlePane.java:178)
    at javax.swing.plaf.metal.MetalRootPaneUI.createTitlePane(MetalRootPaneUI.java:318)
    at    

  javax.swing.plaf.metal.MetalRootPaneUI.installClientDecorations(MetalRootPaneUI.java:272)
    at javax.swing.plaf.metal.MetalRootPaneUI.propertyChange(MetalRootPaneUI.java:416)
    at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
    at  java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:283)
    at java.awt.Component.firePropertyChange(Component.java:8422)
    at javax.swing.JComponent.firePropertyChange(JComponent.java:4510)
    at javax.swing.JRootPane.setWindowDecorationStyle(JRootPane.java:444)
    at javax.swing.JFrame.frameInit(JFrame.java:266)
    at javax.swing.JFrame.<init>(JFrame.java:225)
    at InventoryApp.DFrame.<init>(DFrame.java:30)
    at InventoryApp.JSplash.<init>(JSplash.java:40)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)
    at InventoryApp.JSplash.<init>(JSplash.java:37)

This last line goes on about 100 times

5
  • There is so much. I added what I could to my original question. I had to make the first half in code tages and the last half wouldnt go Commented Jul 23, 2012 at 5:44
  • If have a recursive error occurring (a method is calling it self). I "think" it has something to do with the fact that each time you create an instance of the JSplash, it is it self creating a new instance, over and over again... :P Commented Jul 23, 2012 at 5:49
  • Oh I was creating a JSplash object instead of a DFrame object. Is this correct? Commented Jul 23, 2012 at 5:51
  • @CurtSizemore This right Commented Jul 23, 2012 at 5:53
  • The problem now is...my windows shows up but my button and painting doesn't show Commented Jul 23, 2012 at 5:53

2 Answers 2

2

I don't know why you've done this, but this is what's causing you the problem:

JSplash frame = new JSplash();
//Constructor
public JSplash()
        {
            setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            setLayout (new BorderLayout());
            add(myButton, BorderLayout.SOUTH);
            setDefaultLookAndFeelDecorated(true);
            getContentPane().setBackground(bgColor);
            //adds action listener
            myButton.addActionListener(this);
            final int TALL = 316;
            final int WIDE = 304;
            frame.setSize(WIDE, TALL);
            frame.setVisible(true);
        }

Each time you create a new instance of the JSplash, it creates a new instance of the JSplash until you run out stack space.

It should look something like this.

//Constructor
public JSplash()
        {
            setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            setLayout (new BorderLayout());
            add(myButton, BorderLayout.SOUTH);
            setDefaultLookAndFeelDecorated(true);
            getContentPane().setBackground(bgColor);
            //adds action listener
            myButton.addActionListener(this);
            final int TALL = 316;
            final int WIDE = 304;
            setSize(WIDE, TALL);
            setVisible(true);
        }

I know you have a reference else where, you don't need a reference like this, you can simply call setVisible(false)

Sign up to request clarification or add additional context in comments.

Comments

2

Remove this line from your JSplash code

JSplash frame = new JSplash();

and use this. instead.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.