Salve a tutti. è la prima volta che scrivo qua, spero di trovarmi bene.
Arrivo al dunque..
Devo creare un programma semplice che metta in tabella i dati di oggetti Book. Questi oggetti sono messi in una lista. Il problema è che i libri non voglio che siano letti dal codice, ma da file. Adesso metto il codice, non so se mi sono spiegato..
Quello che il codice dovrebbe fare è scrivere su un file due libri a caso, poi leggere dallo stesso file quei libri e metterli in una seconda lista.. Però mi da un errore..codice:import java.awt.*; import java.io.*; import javax.swing.*; import javax.swing.table.*; public class prova { public static void main(String args[]) throws ClassNotFoundException { JFrame jf=new JFrame("Prova"); Container cjf=jf.getContentPane(); JPanel panel= new JPanel(); JTable table; cjf.setLayout(new BorderLayout()); File libriFile = new File("C:\\libri.dat"); FileOutputStream f=null; ObjectOutputStream oos=null; try { f=new FileOutputStream(libriFile); oos=new ObjectOutputStream(f); } catch (IOException e) { System.out.println("Errore apertura File per scrittura"); System.exit(1); } ListNode bookList = new ListNode(); ListNode bookListProva = null; Book java = new Book("Programmazione", "Cabri", new Integer(452), new Integer(2)); Book analisiA = new Book("Matematica A", "Zanelli", new Integer(321)); bookList.insert(java); bookList.insert(analisiA); try{ oos.writeObject(java); oos.writeObject(analisiA); } catch(IOException e){ System.out.println("Errore scrittura su File"); System.exit(2); } FileInputStream fi=null; ObjectInputStream ooi=null; try { fi=new FileInputStream(libriFile); ooi=new ObjectInputStream(fi); } catch (IOException e) { System.out.println("Errore apertura File per lettura"); System.exit(3); } Book tmp=null; try{ try{ while(true){ if(tmp!=null){ tmp=(Book) ooi.readObject(); bookListProva.insert(tmp);} else break; } }catch(EOFException eofex){ eofex.printStackTrace(); } finally { ooi.close(); fi.close(); } } catch(IOException e){ System.out.println("Errore lettura da File"); System.exit(4); } MyTableModel model= new MyTableModel(bookListProva); table= new JTable(model); JScrollPane jpan=new JScrollPane(table); cjf.add(panel, BorderLayout.NORTH); cjf.add(jpan, BorderLayout.CENTER); jf.setBounds(100, 100, 500, 500); table.setVisible(true); table.setFillsViewportHeight(true); jf.setVisible(true); } } _____________________________________________________________________________ import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class MyTableModel extends AbstractTableModel{ ListNode list; String[] columnNames={"Titolo", "Autore", "Pagine", "Copie", "Disponibilità"}; public final int titoloCol=0; public final int autoreCol=1; public final int pagineCol=2; public final int copieCol=3; public final int disponCol=4; public final int totCol=5; public MyTableModel(ListNode l){ super(); list=l; } public int getColumnCount(){ return totCol; } public int getRowCount(){ return list.lenght(); } public Object getValueAt(int row, int col){ Book book=(Book) list.get(row); switch(col){ case titoloCol: return book.getTitolo(); case autoreCol: return book.getAutore(); case pagineCol: return book.getPagine(); case copieCol: return book.getCopie(); case disponCol: return book.isDisponibile(); } return null; } public String getColumnName(int col){ return columnNames[col]; } } _____________________________________________________________________________ import java.io.*; public class Book implements Serializable{ private String nome; private String autore; private int pagine; private int copie; private boolean disponibile; public Book(String n, String a, int p){ nome=n; autore=a; pagine=p; copie=0; disponibile=false; } public Book(String n, String a, int p, int c){ nome=n; autore=a; pagine=p; copie=c; if(copie>0) disponibile=true; else disponibile=false; } public void setNome(String s){ nome=s; } public void setAutore(String s){ autore=s; } public void setPagine(int n){ pagine=n; } public void setCopie(int n){ copie=n; if(copie>0) disponibile=true; else disponibile=false; } public boolean isDisponibile(){ return disponibile; } public String getTitolo(){ return nome; } public String getAutore(){ return autore; } public int getPagine(){ return pagine; } public int getCopie(){ return copie; } }
Potete aiutarmi e dirmi come potrei risolvere il problema? Grazie..Exception in thread "main" java.lang.NullPointerException
at MyTableModel.getRowCount(MyTableModel.java:24)
at javax.swing.JTable.getRowCount(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.createTableSiz e(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.getPreferredSi ze(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.layoutContainer(Unkno wn Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at java.awt.Window.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at prova.main(prova.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MyTableModel.getRowCount(MyTableModel.java:24)
at javax.swing.JTable.getRowCount(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.createTableSiz e(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.getPreferredSi ze(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.layoutContainer(Unkno wn Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)