i m trying to develop a application which stores data entered by user in Jtable and save it to a file and when application is ran again then the application can retrive the information from file to show it in jtable.
i know basics of java. but knows little about table api.
i know's about Tablemodel(Table's data) and table.
So to accomplish above task i create a Tablemodel class InsertFileDataToJtable to read data from file as shown below.
public class InsertFileDataToJTable extends AbstractTableModel {
Vector data;
Vector columns;
public InsertFileDataToJTable() {
String line;
data = new Vector();
columns = new Vector();
try {
FileInputStream fis = new FileInputStream("BellTime.file");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringTokenizer st1 = new StringTokenizer(br.readLine(), "\t");
while (st1.hasMoreTokens())
columns.add(st1.nextToken());
while ((line = br.readLine()) != null) {
StringTokenizer st2 = new StringTokenizer(line, "\t");
while (st2.hasMoreTokens())
data.add(st2.nextToken());
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public int getRowCount() {
return data.size() / getColumnCount();
}
public int getColumnCount() {
return columns.size();
}
public Class getColumnClass(int index)
{
return String.class;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String)data.get((rowIndex * getColumnCount())
+ columnIndex);
}
public String getColumnName(int index)
{
if(!columns.isEmpty())
{
return columns.get(index).toString();
}
else
{
switch(index)
{
case 0:
return "Start Time";
case 1:
return "Duration";
case 2:
return "Sound Type";
}
return "";
}
}
Now my table is in another form/Class. I Initialised The vectors "data" and "columns" by calling the above class. and then passed these vectors to DefaultTableModel.
My code in Table Form is
TimeTable = new javax.swing.JTable();
InsertFileDataToJTable model = new InsertFileDataToJTable();
TimeTable.setModel(new DefaultTableModel(model.data,model.columns));
jScrollPane2.setViewportView(TimeTable);
I m using netbeans IDE So Most of the code is autogenerated.
When i ran the application with null data i.e when File to be read only contains column names and no data. every thing is fine it works, adds data enterd by user to jtable and then saves it to file when user clicks SAVE button but when application is ran again i.e when file contains data previously saved by user then it throws CLASSCASTEXCEPTION as shown below.
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Vector
at javax.swing.table.DefaultTableModel.justifyRows(DefaultTableModel.java:268)
at javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.java:224)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:159)
at bin.Main_window.initComponents(Main_window.java:183)
at bin.Main_window.<init>(Main_window.java:40)
at bin.Main_Window$16.run(Main_window.java:517)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Please Help me I am stuck at it from one week.
Thanks for any help.........

New Topic/Question
Reply



MultiQuote







|