aspose file tools*
The moose likes Swing / AWT / SWT and the fly likes Exception in thread Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "Exception in thread "main"" Watch "Exception in thread "main"" New topic
Author

Exception in thread "main"

Fran Costigan
Greenhorn

Joined: Feb 06, 2006
Posts: 8
I'm creating an application with 8 cards, using card layout manager and panels.
Here is the code:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Cineplex extends JFrame
{
public CardLayout cardManager;
//switch from one card to another
JButton button1, button2, button3, button4, button5, button6, button7, button8, button9, button10;
JLabel label1, label2, label3, label4, label5, label6, label7, label8, label9, label10, label11;
JTextPane textPane1, textPane2;
JPasswordField passwordField;
JTextField textFieldTxt;

public Cineplex()
{
super("Blackrock_Cineplex");
setSize(700,500);
Container c = this.getContentPane();

//use cardlayout
cardManager = new CardLayout(20,10);
setLayout(cardManager);

//set up the ActionListener
ButtonListener myListener = new ButtonListener();

//the first card
Panel card1 = new Panel();
card1.setBackground(Color.white);

label1 = new JLabel("Please select one of the follwing options:");
card1.add(label1);

button1 = new JButton("Administrator");
card1.add(button1);
button1.addActionListener(myListener);

button2 = new JButton("User");
card1.add(button2);
button2.addActionListener(myListener);

add("Card1", card1);

//the second card
Panel card2 = new Panel();
card2.setBackground(Color.white);

label2 = new JLabel("Please select a movie from thelist below:");
card2.add(label2);

String[] movieStrings = {"Brokeback Mountain", "Chicken Little", "Anchor Man", "Kill Bill"};
JComboBox movieList = new JComboBox(movieStrings);
movieList.setSelectedIndex(1);
movieList.addActionListener(myListener);
card2.add(movieList);

label3 = new JLabel("Number of tickets:");
card2.add(label3);

textPane1 = new JTextPane();
textPane1.setText("");
card2.add(textPane1);

button3 = new JButton("Proceed");
card2.add(button3);
button3.addActionListener(myListener);

button4 = new JButton("Cancel");
card2.add(button4);
button4.addActionListener(myListener);

add("Card2", card2);

//the third card
Panel card3 = new Panel();
card3.setBackground(Color.white);

label4 = new JLabel("Please select your preferred method of payment:");
card3.add(label4);

button5 = new JButton("Credit Card");
card3.add(button5);
button5.addActionListener(myListener);

button6 = new JButton("Cash");
card3.add(button6);
button6.addActionListener(myListener);

add("Card3", card3);

//the fourth card
Panel card4 = new Panel();
card4.setBackground(Color.white);

label5 = new JLabel("Please insert your credit card and press the OK button:");
card4.add(label5);

button7 = new JButton("OK");
card4.add(button7);
button7.addActionListener(myListener);

add("Card4", card4);

//the fifth card
Panel card5 = new Panel();
card5.setBackground(Color.white);

label6 = new JLabel("Please insert your money into the slot provided, and press OK:");
card5.add(label6);

button8 = new JButton("OK");
card5.add(button8);
button8.addActionListener(myListener);

add("Card5", card5);

//the sixth card
Panel card6 = new Panel();
card6.setBackground(Color.white);

label7 = new JLabel("Thank you!");
card6.add(label7);

label8 = new JLabel("You have just bought a ticket for the movies.Enjoy!");
card6.add(label8);

add("Card6", card6);

//the seventh card
Panel card7 = new Panel();
card7.setBackground(Color.white);

passwordField = new JPasswordField(5);
passwordField.setEchoChar('#');
label9 = new JLabel("Enter password: ");
label9.setLabelFor(passwordField);
card7.add(label9);

button9 = new JButton("LogIn");
card7.add(button9);
button9.addActionListener(myListener);

add("Card7", card7);

//the eighth card
Panel card8 = new Panel();
card8.setBackground(Color.white);

button10 = new JButton("Save Details");
card8.add(button10);
button10.addActionListener(myListener);

label10 = new JLabel("Enter name of new movie:");
card8.add(label10);

label11 = new JLabel("Movie Title");
card8.add(label11);
textFieldTxt = new JTextField("20");
card8.add(textFieldTxt);

add("Card8", card8);

//tell the CardLayout to go to the first card of "this", i.e., the frame
cardManager.first(this);

setVisible(true);
}

public static void main(String args[])
{
Cineplex app = new Cineplex();

}

protected class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
Object src = evt.getSource();
if(src == button1)
cardManager.next(Cineplex.this);
//cardManager.show(Cineplex.this, "Card7");
else if(src == button2)
cardManager.show(Cineplex.this, "Card2");
else if(src == button3)
cardManager.show(Cineplex.this, "Card3");
else if(src == button4)
cardManager.show(Cineplex.this, "Card1");
else if(src == button5)
cardManager.show(Cineplex.this, "Card4");
else if(src == button6)
cardManager.show(Cineplex.this, "Card5");
else if(src == button7)
cardManager.show(Cineplex.this, "Card6");
else if(src == button8)
cardManager.show(Cineplex.this, "Card6");
else if(src == button9)
cardManager.show(Cineplex.this, "Card8");
}//end actionPerformed
}
}//end class


My problem is that when i run this code it throws up the following error and i really don't know how to fix it:

Exception in thread �main� java.lang.IllegalArgumentException: wrong parent for CardLayout
at java.awt.CardLayout.checkLayout(Unknown Source)
at java.awt.CardLayout.first(Unknown Source)
at Cineplex.<init>(Cineplex.java:170)
at Cineplex.main(Cineplex.java:177)

Any help would be great.
Thanks



Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

JFrame.setLayout() is just shorthand for JFrame.getContentPane().setLayout(), so I believe you need to say

cardManager.first(getContentPane())

rather than

cardManager.first(this)

Even though the error message has the word "thread' in it, this has nothing to do with Threads -- it's a Swing question, so I'm going to move it to Swing/AWT/SWT/JFace for further discussion.


[Jess in Action][AskingGoodQuestions]
Ben Zung
Ranch Hand

Joined: Mar 25, 2004
Posts: 109
Also, you need to set your Container(c)'s layout to be CardLayout.

And add your cards to c

instead of

Use CardLayout's show method and pass the Container as the first arg, the name of the card you want to show as the second.

Good Luck!
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

Originally posted by Ben Zung:
Also, you need to set your Container(c)'s layout to be CardLayout.


No, actually. In Tiger, JFrame.add() delegates to getContentPane().add(), and JFrame.setLayout() delegates to getContentPane().setLayout(), so this is just fine in that regard. If she's not using Tiger, then this will complain about the add() calls long before the NPE is thrown.
 
wood burning stoves
 
subject: Exception in thread "main"