Mysterious one time Casting Exception
<p>I am trying to use the PropertyChangeSupport of JComponent class.
But when I am executing the following code, Clicking on the menu button first time gives Runtime casting Exception, but then it runs fine always.</p>

<p>FrameListener.java</p>

<pre><code>import javax.swing.*;
import java.beans.*;
import java.awt.*;
import java.awt.event.*;

public class FrameListener extends JFrame implements ActionListener, PropertyChangeListener
{

    JLabel lblMessage;
    JMenuItem changeFont;
    FontSource fe = new FontSource(this,"Font Editor");

    public FrameListener(){

     super("Hello World");
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) ;
     increaseReadability() ;

     changeFont.addActionListener(this);

     fe.addPropertyChangeListener(this);

     setSize(400,200);
     setVisible(true);
    }

    private void increaseReadability(){
     JPanel panel = new JPanel();
     Font f = new Font("Times New Roman",Font.BOLD,24);
     lblMessage = new JLabel("HELLO WORLD",SwingConstants.CENTER);
     lblMessage.setFont(f);
     panel.add(lblMessage);


     JMenuBar actionBar = new JMenuBar(); 
     JMenu edit = new JMenu("Edit");
     changeFont = new JMenuItem("Font");

     actionBar.add(edit);
     edit.add(changeFont);
     add(actionBar,BorderLayout.NORTH);
     add(panel,BorderLayout.CENTER);
    }

    public void propertyChange(PropertyChangeEvent pcevent){
     Object obj = pcevent.getNewValue() ;
     System.out.println(obj.getClass()) ;

     //Statement occuring problem 1st time
     Font newFt = (Font)obj;

     lblMessage.setFont(newFt);
    }

    public void actionPerformed(ActionEvent evt){
     fe.setVisible(true);
    }

    public static void main(String argv[]) {
     new FrameListener();
    }
}
</code></pre>

<p>FontSource.java</p>

<pre><code>import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.beans.*;


public class FontSource extends JDialog implements ActionListener {

    private Font newFont = new Font("Times New Roman",Font.BOLD,12);

    JComboBox cbfType,cbfStyle,cbfSize;
    JButton btnOk,btnCancel;

    //protected PropertyChangeSupport changes = new PropertyChangeSupport(this);

    public Font getNewFont(){
     return newFont;
    }

    public void setNewFont(Font f){
     Font old = newFont;

     try{

      //this statement calls the propertyChange() of FrameListener
                        //if u are removing comments, replace the following statement with
                       // changes.firePropertyChange("Font Changed",old,f);
      firePropertyChange("Font Changed",old,f);

      newFont = f;
     }
     catch(Exception e){
      System.out.println(e);
     }
    }

    public FontSource(Frame fr,String title){

     super(fr,title);
     // getting font family from the graphics environment.
     GraphicsEnvironment gf = GraphicsEnvironment.getLocalGraphicsEnvironment();
     String myfont[] = gf.getAvailableFontFamilyNames();
     cbfType = new JComboBox(myfont);
     add(cbfType);

     String fontStyle[] = {"PLAIN","ITALIC","BOLD",};
     cbfStyle = new JComboBox(fontStyle);
     add(cbfStyle);

     String fontSize[] = {"10","12","14","16","18","20","24","26","28","36","48","72"};
     cbfSize = new JComboBox(fontSize);
     add(cbfSize);

     btnOk =new JButton("OK");
     btnCancel =new JButton("Cancel");

     add(btnOk);
     add(btnCancel);

     // adding action listener
     btnOk.addActionListener(this);
     btnCancel.addActionListener(this);

     // setting layout and size for the dialog
     setLayout(new FlowLayout());
     setSize(170,170);
    }

    public void actionPerformed(ActionEvent ae){

     if(ae.getSource()==btnOk){
      String type = (String) cbfType.getSelectedItem();
      String style = (String)cbfStyle.getSelectedItem();
      int s = 0;
      int size = Integer.parseInt((String)cbfSize.getSelectedItem());
      if(style=="PLAIN")
       s= Font.PLAIN;
      else {
       if(style =="BOLD")
        s= Font.BOLD;
       else
        s= Font.ITALIC;
      }

      Font f = new Font(type,s,size);

      setNewFont(f);
     }
     else{
      this.setVisible(false);
     }
    }

    /*
    public void addPropertyChangeListener(PropertyChangeListener l){
     System.out.println("attachement done...");
     changes.addPropertyChangeListener(l);
    }

    public void removePropertyChangeListener(PropertyChangeListener l){
     changes.removePropertyChangeListener(l);
    }
    */
}
</code></pre>

<p>But If i use my own PropertyChangeSupport (remove the comments in FontSource.java), then it's working perfectly.
I tried my best, but not getting this.
Thnx in advance :--)</p>
