Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    [JAVA] Swing e file

    Ciao a tutti!!!!
    Sto facendo l'esercizio di un testo che data una class che gestisce un file di conti bancari bisogna progettarne l'interfaccia grafica. Io ho disegnato l'interfaccia in una classe e nel main ho messo:

    codice:
    public class BankInterfaceTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) 
    	{
    		BankData data = new BankData();
    		
    		try
    		{
    			try
    			{
    				data.open( "bank.dat" );
    				BankFrame frame = new BankFrame( data );
    				frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    				frame.setVisible(true);
    			}
    			finally
    			{
    				data.close();
    			}
    		}
    		catch( IOException exception ){}
    	}
    
    }
    Solo che questo non funziona perche' mi chiude il file prima ( da quel che ho potuto notare ), come posso risolvere? BanFrame estende JFrame crea l'interfaccia e dentro ha una classe privata che implementa ActionListener per gestire il pulsante.
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    uhm... IMHO se deleghi BankFrame a gestire la chiamata al metodo open e close dell'oggetto BankData è più facile gestire il sistema.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    ma quindi l'operazione di chiusura del file dove la faccio?

    Ho messo nel costruttore di BankFrame la chiamata ad open per aprire il file..e la close dove la devo mettere?
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    dipende dal codice di BankFrame, forse anche nel finalize andrabbe bene...

    Perchè magari nel momento in cui parte il thread che gestisce gli eventi e ce ne sono altri magari salta oltre e chiude il file mentre magari è in uso.
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ecco il codice, molto semplice:

    codice:
    public class BankFrame extends JFrame
    {
    	public BankFrame( BankData data )
    	{		
    		setTitle("Bank Account Manager");
    		setSize(230,150);
    		
    		GridBagLayout layout = new GridBagLayout();
    		ActionListener listener = new BankAction();
    		
    		setLayout( layout );
    		
    		nContoLabel = new JLabel( "N° Conto corrente ");
    		versamentoLabel = new JLabel("Versamento");
    		
    		nContoField = new JTextField(10);
    		versamentoField = new JTextField(10);
    		
    		fineButton = new JButton("Fine");
    		fineButton.addActionListener(listener);
    		
    		risultatoLabel = new JLabel();
    		saldoLabel = new JLabel();
    		
    		add( nContoLabel, new GBC(0, 0).setAnchor(GBC.WEST) );
    		add( nContoField , new GBC(1,0).setInsets(1) );
    		add( versamentoLabel, new GBC(0, 1).setAnchor(GBC.WEST));
    		add( versamentoField , new GBC(1,1).setInsets(1));
    		add( fineButton, new GBC( 0, 2, 2, 1));
    		add( risultatoLabel, new GBC( 0, 3, 2, 1) );
    		add( saldoLabel, new GBC( 0, 4, 2, 1) );
    		
    
    	}
    	
    	private class BankAction implements ActionListener
    	{
    		public void actionPerformed( ActionEvent event )
    		{
    			int accountNumber = Integer.parseInt( nContoField.getText() );
    			double versamento = Double.parseDouble( versamentoField.getText() );
    			
    			try
    			{
    				int position = data.find( accountNumber );
    			
    				if( position > 0 )
    				{
    					System.out.println( "Trovato l'acconto");
    					BankAccount account = data.read( position );
    				
    					account.deposit( versamento );
    					
    					data.write(position, account);
    					
    					risultatoLabel.setText( "Account trovato");
    					saldoLabel.setText( "Nuovo bilancio = " + account.getBalance() );
    				}
    				else
    				{
    					System.out.println( "Creo un nuovo account");
    					BankAccount account = new BankAccount( accountNumber, versamento);
    					
    					data.write( data.size(), account);
    					
    					risultatoLabel.setText( "Creo un nuovo acconto");
    					saldoLabel.setText( "Nuovo bilancio = " + account.getBalance() );
    				}
    			}
    			catch( IOException exception){}
    					
    		}
    	}
    	
    	private JLabel nContoLabel;
    	private JLabel versamentoLabel;
    	
    	private JTextField nContoField;
    	private JTextField versamentoField;
    	
    	private JButton fineButton;
    	
    	private JLabel risultatoLabel;
    	private JLabel saldoLabel;
    	
    	private BankData data;
    
    }
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ecco a quanto pare il problema è che l'operazione che usa il file è nel thread che gestisce gli eventi quindi supera la riga BankDate e chiude il file prima ancora che le operazioni siano concluse.
    Io quindi metterei la chiusura del file prima della chiusura della finestra, oppure lo riapri e lo richiudi ogni volta(inizio e fine dell'ActrionPerform).
    Per chiudere cmq prima che venga chiusa la finestra invece di mettere EXIT_ON_CLOSE metti DO_NOTHING implementi WindowListener e all'evento OnClose o qualcosa di simile(guarda sulla doc essere sicuro del nome) prima chiudi il file e dopo chiudi il programma con System.exit(0)

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.