Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Utilizzo della Serializzazione

    Ciao a tutti.

    Sto facendo un programmino Java che gestisce un magazzino...

    Il programma deve "lavorare" su oggetti di tipo "Articolo".

    Inoltre Il programma utilizza come contenitore per gli oggetti Articolo una collezione Java(TreeSet).

    Allora mi è stato suggerito che la classe Articolo implementi l'interfaccia Serializable

    codice:
    public class Articolo implements Serializable{
    	
    	private String tipo;
    	private String marca;
    	private String modello;
    	private String codice;
    	private String settore;
    	private int quantità;
    	private int quantitàD;
    	private int quantitàA;
    	private double prezzo;
    	private String caratteristiche;
    	
    ....
    ....
    ......
    Ora nel mio programma mi sono creato un interfaccia che gestisce una collezione di dati

    codice:
    package PacchettoA;
    import java.util.*;
    
    public interface ManagerContenitore extends Iterable<Articolo>{
    	
    	boolean AggiungiArticolo(Articolo A);
    	boolean RimuoviArticolo(Articolo A);
    	void ModificaArticolo(Articolo A);
    
    	}
    codice:
    package PacchettoA;
    
    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Manager implements ManagerContenitore{
    	
    	private TreeSet<Articolo> Contenitore;
    	
    	public Manager(){
    		Contenitore = new TreeSet<Articolo>();
    	}
    	
    	@Override
    	public boolean AggiungiArticolo(Articolo A){
    		Contenitore.add(A);
    		return true;
    	}
    	
    	@Override
    	public boolean RimuoviArticolo(Articolo A){
    		if(!(Contenitore.contains(A))) return false;
    		Contenitore.remove(A);
    		return true;
    	}
    
    		public Iterator<Articolo> iterator(){
    		return Contenitore.iterator();
    	}
    }
    ho poi inserito nei campi istanza dell'interfaccia grafica un oggetto di tipo ManagerContenitore , che rappresenta la collezione.

    codice:
    public class InterfacciaPrincipale extends JFrame {
    
    ...
    ...
    ...
    private ManagerContenitore cont;
    Beh quello che volevo sapere è come utilizzare la serializzazione.

    Ad Esempio , io inserisco un oggetto Articolo nella collezione:

    codice:
    cont.aggiungiArticolo(Art);
    Devo poi utilizzare la serializzazione? Se si come?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    In genere quando io uso qualcosa di serializzabile mi interessa buttare su uno stream l'intero oggetto, tu cosa devi fare? perché ti è stato detto di usare la serializzazione?
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Sicuramente per poter salvare i dati in un file credo.

    Il programma che sto facendo aggiunge per esempio oggetti "Articolo" in un contenitore,
    questi oggetti possono essere modificati , rimossi , visualizzati ecc..

    A quanto capisco , quando si utilizza la serializzazione è automatico utilizzare uno stream per salvare gli oggetti?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no lo stream non lo usi solo per salvare oggetti, l'utilizzo classico è il passaggio su file, ma non è detto che si vada su file.
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ok.

    Aiutami un attimo.

    Allora mettiamo che io visualizzo una frame dove inserisco i dati di Articolo (Marca Tipo Modello ecc).

    Una volta inseriti i dati premo il bottone Aggiungi Articolo.

    Aggiungi Articolo deve aggiungere l'oggetto nel contenitore.

    Nell'ascoltatore Del bottone ho inserito un operazione del genere:

    contenitore.AggiungiArticolo(ArticoloAggiunto);

    codice:
    class ascoltatoreFNA implements ActionListener{
    				
    				private FrameNotificaAggiungi Bsi;
    				
    				public ascoltatoreFNA(FrameNotificaAggiungi Bsi){
    					this.Bsi=Bsi;
    					
    				}
    				
    				
    				public void actionPerformed(ActionEvent e){
    					
    					Articolo ArticoloAggiunto = new Articolo(infoTipo.getText(),infoMarca.getText(), infoModello.getText(), infoCodice.getText(), infoSettore.getText(), Integer.parseInt(infoQuantità.getText()), Double.parseDouble(infoPrezzo.getText()),infoCaratteristiche.getText());
    					String Aggiunta = ("Articolo Aggiunto in magazzino : " + " [ " +ArticoloAggiunto.toString() + " ]" +"\n");
    					EventiMagazzinoRiepilogo.append(Aggiunta);
    					contenitore.AggiungiArticolo(ArticoloAggiunto);
    					Bsi.dispose();
    					
    				}
    				
    			}//ASCOLTATORE FNA
    eclipse mi da però un errore al momento che premo il bottone.

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Forse è perchè devo serializzare?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    la riga a cui hai l'errore? cosa tenti di fare quando hai questo errore?
    Qui non mi sembra necessario "serializzare"
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    A quanto capisco , quando si utilizza la serializzazione è automatico utilizzare uno stream per salvare gli oggetti?
    ObjectOutputStream (la classe che ha la competenza della serializzazione) deve essere costruito passando un OutputStream. Che poi questo sia un FileOutputStream o un XyzOutputStream o un OutputStream da un socket o di una porta seriale o altro .... alla serializzazione non importa.

    L'unica cosa a cui prestare attenzione è a un caso un po' subdolo. La serializzazione di serie non funziona in "append" e si incappa in questo problema specialmente quando si scrive su un FileOutputStream. FileOutputStream in effetti ha dei costruttori a cui specificare di fare l'append. Peccato che con la serializzazione non funziona, per via di come è stato pensato il "protocollo" binario dello stream.

    In sostanza: se hai un file con N oggetti serializzati e vuoi aggiungere altro, devi rileggere tutti gli oggetti e poi riscrivere il file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    tento di aggiungere l'oggetto articolo nel contenitore (Che è una TreeSet);

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    a parte che non sono sicura che qui il problema sia l'append come dici tu, perché vedo una NPE e non conoscendo i tipi degli altri oggetti usati non so dire molto altro
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa posti tutto il codice? interessato da quelle funzioni?
    Perché per l'aggiunta in un treeset non hai bisogno di serializzare (almeno io non lo farei)
    RTFM Read That F*** Manual!!!

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.