Whatever is happening, it looks like AbstractTableModel has a non-transient
reference to it's JTable - I'm not sure how, but there it is.
>From a better design viewpoint you should be able to get on better by using
AbstractTableModel to write an adapter around your class which actually
holds the data, and then make your wrapped class serialisable. That way
you'd know for sure you're only persisting the data you need to.
A pain, I know, but from what I hear most people who work with JTable end up
writing facades for their business objects which support TableModel. Getting
a business object to support TableModel (which is a UI interface) couples
your tiers too strongly.
-----Original Message-----
From: J.Ganesan [mailto:[EMAIL PROTECTED]]
Sent: 04 March 2001 16:43
To: Tim Gordon
Cc: [EMAIL PROTECTED]
Subject: Re: AbstractTableModel serialization problem
Tim Gordon wrote:
> My guess is that the table model has a reference to the table, which is
why
> it is getting serialised along with the model. Most likely candidate is
that
> the AbstractTableModel is holding a reference to the table because the
table
> is a listener.
>
> Try overriding addTableModelListener() on your subclass of
> AbstractTableModel and put some debug info in there to determine what
> classes are adding themselves as listeners - you will need to remove them
> all before serialising your model.
>
> A quick and dirty way around this might be to maintain a reference to the
> model you wish to serialise and then set a new model on the JTable which
is
> looking at your custom model - JTable will have to remove itself as a
> listener to the old model before it listens to the new model.
No. Did not work. Here is the code
// first try
// make EventListenerList to point to null just before
// serializing
private void writeObject( ObjectOutputStream objectOutputStream )
throws IOException
{
EventListenerList llSaved = listenerList ; // protected variable
//
in
abstractTableModel
listenerList = null ;
objectOutputStream.defaultWriteObject() ;
listenerList = llSaved ;
}
// second try
// set a dummy model for the listening table
private void writeObject( ObjectOutputStream objectOutputStream )
throws IOException
{
ListeningTable.getInstance().setModel( ( new AbstractTableModel()
{
public int getRowCount()
{
return 3 ;
}
public int
getColumnCount()
{
return 3 ;
}
public Object
getValueAt(int
row, int column)
{
return null ;
}
}
)
) ;
objectOutputStream.defaultWriteObject() ;
ListeningTable.getInstance().setModel( this ) ;
}
Neither worked. JTable sticks out in the saved file.
Any other ideas pls.
ganesan
>
>
> Alternatively you could implement clone() on your AbstractTableModel
> subclass to just copy your private data (and not the listeners) and then
> serialise.
>
> Lots of things to try.
>
> Tim
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of
> J.Ganesan
> Sent: 03 March 2001 06:36
> To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
> Subject: AbstractTableModel serialization problem
>
> Hi all,
> I have a class X , which extends AbstractTableModel. When I save an
> object of X, the JTable whose TableModel is the object of X, is also
> serialized and saved. I am interseted ONLY in the private data of X.
> Besides, the file size becomes unacceptably big.
> Any suggestions to solve this problem ?
> Thanks.
>
> ganesan
>
> _______________________________________________
> Swing mailing list
> [EMAIL PROTECTED]
> http://eos.dk/mailman/listinfo/swing
>
> _______________________________________________
> Swing mailing list
> [EMAIL PROTECTED]
> http://eos.dk/mailman/listinfo/swing
_______________________________________________
Swing mailing list
[EMAIL PROTECTED]
http://eos.dk/mailman/listinfo/swing