Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    2

    [JAVA] problema lettura piu Object da file

    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..

    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;
    	}
    }
    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..

    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)
    Potete aiutarmi e dirmi come potrei risolvere il problema? Grazie..

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    - Il main() è abbastanza lungo e fa troppe cose ... c'è tutto un mix di gestione interfaccia utente, lettura dati, scrittura dati ecc... Evita questi design.
    - La gestione delle eccezioni non è delle migliori ....
    - Non chiudi correttamente tutti gli stream, ad esempio l'ObjectOutputStream non lo chiudi (e quindi questo può già dare problemi).
    - I costruttori di Book si possono migliorare, uno dei due può essere espresso come invocazione dell'altro.
    - Il problema del NullPointerException:

    ListNode bookListProva = null; <----- e non viene istanziato un ListNode
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    2
    Originariamente inviato da andbin
    - Il main() è abbastanza lungo e fa troppe cose ... c'è tutto un mix di gestione interfaccia utente, lettura dati, scrittura dati ecc... Evita questi design.
    - La gestione delle eccezioni non è delle migliori ....
    - Non chiudi correttamente tutti gli stream, ad esempio l'ObjectOutputStream non lo chiudi (e quindi questo può già dare problemi).
    - I costruttori di Book si possono migliorare, uno dei due può essere espresso come invocazione dell'altro.
    - Il problema del NullPointerException:

    ListNode bookListProva = null; <----- e non viene istanziato un ListNode
    Grazie, ho capito.. Questo non è il programma ufficiale, è solo uno temporaneo che sto creando velocemente per capire i meccanismi che regolano il funzionamento di tabelle, input e output e liste. Quello che farò, sarà fatto molto meglio, non inserirò tutto quel codice nel main. Grazie mille, credo di aver risolto il problema!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.