Hi everyone,

I am trying to save the contents the of the jtable together with all its fonts and everything else. The program compiles without any errors but When i try to save the contents of the JTable an exception is thrown in the tablesaveas method in the below method

Please note that i am saving the jtable as an object. I am providing the below runnable example so you guys can compile and run and see what i mean.

Here is the code

Code:
import java.awt.*;
import java.io.*;
import java.util.*;
import java.awt.print.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class JTablesui implements ActionListener, ItemListener

{

	JFrame fr = new JFrame ("Frame");
	JDialog Dialog1 = new JDialog (fr, "Row Height"); 

	JLabel Label1 = new JLabel("Label1                       ", SwingConstants.RIGHT);
	JLabel Label2 = new JLabel("                             ", SwingConstants.LEFT);
	JLabel Label3 = new JLabel("Enter table row height in pixels");

	JButton Button6 = new JButton("Save As");
	JButton Button19 = new JButton("Set Row Height");
	JButton Button20 = new JButton("Set Height");
	JButton Button21 = new JButton("Close");
	JButton Button22 = new JButton("Foreground Color For Cells");

	JTextField TextField1 = new JTextField("", 10);
	JTextField TextField2 = new JTextField("", 20);
	JTextField TextField3 = new JTextField("", 10);

	JComboBox ComboBox1;
	JComboBox ComboBox2 = new JComboBox();

	//The below command line sets the model for the JTable which
	//has two arguments as explained below
	//The first argument specifies the number of rows for the JTable to display upon
	//it's initialization 
	//The second argument specifies the number of columns for the JTable to display upon
	//it's initialization

	DefaultTableModel TableModel1 = new DefaultTableModel(5, 10);

	//The below command line sets the table model to the JTable

	JTable Table1 = new JTable(TableModel1);

	JScrollPane ScrollPane1 = new JScrollPane(Table1, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
	ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);  

	JFileChooser FileChooser1 = new JFileChooser();  

	JColorChooser ColorChooser3 = new JColorChooser();


	Color Color3;          

	Dimension Size1 = new Dimension();

	int FontSize = 12;
	String FontFamily = "Arial";

	String SF = "";

	public void initialize ()
	{ 
		Container pane = fr.getContentPane();
		pane.setLayout(new FlowLayout());
		fr.setSize(250,300);
		fr.setLocation(300,300);
		fr.setBackground(Color.lightGray);
		//The below command line must be set to false so that user 
		//resizing is allowed

		Table1.setAutoCreateColumnsFromModel(false);
		Size1.width = 350;
		Size1.height = 250;
		ScrollPane1.setPreferredSize(Size1);
		Table1.setModel(TableModel1);
		//The below command line must be set to JTable.AUTO_RESIZE_OFF so that user 
		//resizing is allowed

		Table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
		pane.add(ScrollPane1);
		pane.add(Button6);
		pane.add(Button19);
		pane.add(Button22);
		combofontfamilyinitialize();
		pane.add(ComboBox1);
		combofontsizeinitialize();
		pane.add(ComboBox2);
		pane.add(Label1);

		// Use the JAVA constant JFrame.HIDE_ON_CLOSE for subsequent forms in multi form
		// applications

		fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Button6.addActionListener(this);
		Button19.addActionListener(this);
		Button22.addActionListener(this);
		ComboBox1.addItemListener(this);
		ComboBox2.addItemListener(this);
		fr.pack();
		fr.setVisible(true);
	}

	public void combofontfamilyinitialize ()
	{
		//This function fills the combo box with the system available font families

		GraphicsEnvironment ge1 = GraphicsEnvironment.getLocalGraphicsEnvironment();
		String[] k = ge1.getAvailableFontFamilyNames();
		ComboBox1= new JComboBox(k);
	}

	public void combofontsizeinitialize ()
	{
		//This function fills the combo box with font sizes 

		ComboBox2.addItem("8");
		ComboBox2.addItem("9");
		ComboBox2.addItem("10");
		ComboBox2.addItem("11");
		ComboBox2.addItem("12");
		ComboBox2.addItem("14");
		ComboBox2.addItem("16");
		ComboBox2.addItem("18");
		ComboBox2.addItem("20");
		ComboBox2.addItem("22");
		ComboBox2.addItem("24");
		ComboBox2.addItem("26");
		ComboBox2.addItem("28");
		ComboBox2.addItem("36");
		ComboBox2.addItem("48");
		ComboBox2.addItem("72");
	}

	public void initializedialog1 ()
	{ 
		Container pane1 = Dialog1.getContentPane();
		pane1.setLayout(new BoxLayout(pane1, BoxLayout.Y_AXIS));
		Dialog1.setSize(250,300);
		Dialog1.setLocation(300,300);
		Dialog1.setBackground(Color.lightGray);
		pane1.add(Label3);
		pane1.add(TextField3);
		pane1.add(Button20);
		pane1.add(Button21);

		//Use the JAVA constant JDialog.HIDE_ON_CLOSE for subsequent forms in multi form
		//applications

		Dialog1.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
		Button20.addActionListener(this);
		Button21.addActionListener(this);
		Dialog1.pack();
		Dialog1.setVisible(true);
	}

	public void tablesaveas ()
	{
		//This function saves the model of the table to disk using the user
		//specified file name

		//This is the function in which the exception is thrown

		if(FileChooser1.showSaveDialog(fr) != JFileChooser.APPROVE_OPTION)
		{
			return;
		}

		try
		{
			File f = FileChooser1.getSelectedFile();
			SF = (f.toString() + ".DAT");
			FileOutputStream fStream = new FileOutputStream(SF);
			ObjectOutput stream = new ObjectOutputStream(fStream);

			//The below two command lines saves the table model and table column data
			//as an object using the user specified file name
			stream.writeObject(Table1.getModel());
			stream.writeObject(Table1.getColumnModel());
			stream.writeObject(Table1.getFont());
			stream.writeObject(Table1.getForeground());
			stream.writeObject(TextField3.getText());
			stream.writeObject(Label2);
			stream.flush();
			stream.close();
			fStream.close();
		}

		catch (Exception e)
		{
			Label1.setText("A table saving error has occurred");
		}

	}

	public void actionPerformed(ActionEvent event)
	{
		JComponent b = (JComponent)event.getSource();
		int d, d1;
		String str3;

		if(b == Button6)
		{
			//This is the function in which the exception is thrown

			tablesaveas();
		}

		else if(b == Button19)
		{
			d = Table1.getRowHeight();
			str3 = Integer.toString(d);
			TextField3.setText(str3);
			initializedialog1();
		}

		else if(b == Button20)
		{
			str3 = TextField3.getText();
			d = Integer.parseInt(str3);
			Table1.setRowHeight(d);
		}

		else if(b == Button21)
		{
			Dialog1.setVisible(false);
		}

		else if(b == Button22)
		{
			Color3 = ColorChooser3.showDialog(fr, "Color Chooser", Color.black);
			//The below command line test to see if the Ok button or the Cancel button
			//was clicked on the JColorChooser as if no color is selected the JColorChooser
			//simply returns a null 

			if(Color3 != null)
			{
				Table1.editCellAt(0,0);
				TextField1 = (JTextField)Table1.getEditorComponent();

				if(TextField1 != null)
				{
					TextField1.setForeground(Color3);
				}

				Table1.setSelectionForeground(Color3);
				Table1.setForeground(Color3);

			}

		}

	}

	public void itemStateChanged(ItemEvent event) 
	{
		JComponent c = (JComponent)event.getSource();

		if(c == ComboBox1)
		{
			Table1.editCellAt(0,0);
			FontFamily = (String)ComboBox1.getSelectedItem();
			Font Font1 = new Font(FontFamily, Font.PLAIN, FontSize);
			TextField1 = (JTextField)Table1.getEditorComponent();

			if(TextField1 != null)
			{
				TextField1.setFont(Font1);
			}

			Table1.setFont(Font1);
		}

		else if(c == ComboBox2)
		{
			String h = (String)ComboBox2.getSelectedItem();
			FontSize = Integer.parseInt(h);
			Table1.editCellAt(0,0);
			Font Font2 = new Font(FontFamily, Font.PLAIN, FontSize);
			TextField1 = (JTextField)Table1.getEditorComponent();

			if(TextField1 != null)
			{
				TextField1.setFont(Font2);
			}

			Table1.setFont(Font2);
		}

	}
	public static void main(String args[])
	{
		JTablesui a = new JTablesui(); 
		a.initialize();
	}
}
To be continued on the below thread as this post is longer than
10000 characters, i apologize