Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Aprire un file dopo un certo tempo con Java e poi chiuderlo

    Io con questo comando apro un file .csv

    codice:
    try {
                    String nomeFile = "Controlli.csv";
                    Runtime rt = Runtime.getRuntime();
                    Process proc;
                    proc = rt.exec("cmd /C start " + nomeFile);
                    InputStream inp = proc.getInputStream();
                    OutputStream outp = proc.getOutputStream();
                    InputStream errp = proc.getErrorStream();
                    }
                    catch (Exception exc)
                    {
                    exc.printStackTrace();
                    }
    solo che me lo apre troppo velocemente e il mio programma ancora non ha messo tutti i dati dentro...

    Seconda cosa, come posso per fare chiudere il file Controlli.csv???Che comando devo utilizzare?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Aprire un file dopo un certo tempo con Java e poi chiuderlo

    Originariamente inviato da xxdavide84xx
    solo che me lo apre troppo velocemente e il mio programma ancora non ha messo tutti i dati dentro...

    Seconda cosa, come posso per fare chiudere il file Controlli.csv???Che comando devo utilizzare?
    No alt. Se fai quella exec, si presuppone come minimo che quel file sia completo ... che si possa aprire.
    Se quel file lo stai scrivendo tu da java, allora prima di fare la exec devi assicurarti di aver scritto tutto e di aver fatto la close() sullo stream o sul writer che sia (non so cosa usi).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Io faccio la close, ma non so perchè, se apro il file subito in quel modo non mi visualizza i dati, mentre se poi lo vado ad aprire fisicamente da C i dati presi da un database ci sono dentro...
    VOlevo provare a mettere 1 minuto di ritardo nell'aprire il file per capire se il problema era il tempo....
    codice:
     class GenerateButtonActionListener implements ActionListener { 
        public void actionPerformed(ActionEvent e) {        
                
                    pw = null;
                    try {
                    pw = new PrintWriter(new BufferedWriter(new FileWriter("C:\\Controlli.csv", false))); 
                    pw.print("postazione;data_ora;udt;articolo;lotto;quantita\n");       
                    tables = new TableSQL();
                    desktop.add(tables);
                    tables.moveToFront();    
                    pw.close();
                    } catch (IOException ex) {
                    Logger.getLogger(ControlloLog.class.getName()).log(Level.SEVERE, null, ex);
                                            }            
                    VisualizzaFile();
                                                    }
      }  
      
      public void VisualizzaFile() {
              try
                    {
                    String nomeFile = "Controlli.csv";
                    Runtime rt = Runtime.getRuntime();
                    Process proc;
                    proc = rt.exec("cmd /C start " + nomeFile);
                    InputStream inp = proc.getInputStream();
                    OutputStream outp = proc.getOutputStream();
                    InputStream errp = proc.getErrorStream();
                    }
                    catch (Exception exc)
                    {
                    exc.printStackTrace();
                    } 
      }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da xxdavide84xx
    codice:
                    pw = new PrintWriter(new BufferedWriter(new FileWriter("C:\\Controlli.csv", false))); 
                    pw.print("postazione;data_ora;udt;articolo;lotto;quantita\n");       
                    tables = new TableSQL();
                    desktop.add(tables);
                    tables.moveToFront();    
                    pw.close();
    A parte quella print della intestazione ... dove fai le altre scritture? Non le vedo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Codice COMPLETO:
    La scrittura la faccio dentro TableSQL dove popolo pure una tabella.
    codice:
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import java.beans.*;
    import java.awt.event.*; 
    import java.awt.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.text.DateFormat;
    import javax.swing.JInternalFrame;
    import java.text.SimpleDateFormat;
    import com.toedter.calendar.*;
    import java.util.Vector;
    import javax.swing.table.*;
    import java.io.*;
    import java.util.*;
    
    public class ControlloLog extends JFrame { 
      private JDesktopPane desktop; 
      private JDateChooser c2;
      private JDateChooser c3;
      private String data_inizio;
      private String data_fine;
      private String selectedItem;
      private String[] items;
      private JComboBox combobox;
      private JPopupMenu pop;
      private ResultSet result1;
      private int rows;
      private TableSQL tables;
      private PrintWriter pw;
      
      public ControlloLog(){ 
        super("Controllo Log Magazzino"); 
        setSize(800,600); 
        JToolBar toolbar = createToolBar(); 
        desktop = new JDesktopPane(); 
        getContentPane().add(BorderLayout.NORTH,toolbar); 
        getContentPane().add(BorderLayout.CENTER,desktop);  
        setVisible(true); 
      } 
      protected JToolBar createToolBar() { 
        JToolBar tb = new JToolBar(JToolBar.HORIZONTAL); 
        JPanel titlePanel = new JPanel(); 
        titlePanel.setLayout(new FlowLayout()); 
        
        JButton generateButton = new JButton(" Verifica Log ");    
        ActionListener listener = new GenerateButtonActionListener(); 
        generateButton.addActionListener(listener);           
          try {
          	String driver = "net.sourceforge.jtds.jdbc.Driver";
          	Class.forName(driver).newInstance();
     } 
          catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Fallito il caricamento dei driver SQL.","ERRORE CARICAMENTO DRIVER SQL",JOptionPane.ERROR_MESSAGE);
          	return (null);
        }
          try {
           Connection conn = null;
          	// Query SQL
          	String SQL_conta_postazione= "SELECT count (distinct(postazione)) FROM log_lavorazione_baie";
            conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/master", "us", "pw");   
    
          	Statement selected = conn.createStatement();
          	//caricamento query SQL
         	ResultSet result_conta_postazione = selected.executeQuery(SQL_conta_postazione);
            
            result_conta_postazione.next();
            int ris_pos=result_conta_postazione.getInt(1); 
            ris_pos=ris_pos+1;
            items = new String[ris_pos]; 
            items[0]="Tutte";
            for(int k=1;k<ris_pos; ){  
            Connection conn1 = null;
            String SQL_postazione= "SELECT distinct(postazione) FROM log_lavorazione_baie order by postazione";
            conn1 = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/master", "us", "pw");
          
          	Statement selected1 = conn1.createStatement();
          	//caricamento query SQL
         	ResultSet result_postazione = selected1.executeQuery(SQL_postazione);
        	while(result_postazione.next())  {
            items[k]=""+result_postazione.getInt(1)+"";
            k++;
            }
          }
                } 
            catch (Exception e) {
                JOptionPane.showMessageDialog(null,"Connessione col database fallita","ERRORE CONNESSIONE DATABASE",JOptionPane.ERROR_MESSAGE);     
            } 
        combobox= new JComboBox(items);
        selectedItem="Tutte";
        ActionListener selectionListener = new SelectionListener(); 
        combobox.addActionListener(selectionListener);         
    
        c2= new JDateChooser();
        c3= new JDateChooser();
        JLabel label_postazione = new JLabel("Postazione "); 
        c2.setName("Data Inizio");
        c3.setName("Data fine");
        JLabel label_data_inizio = new JLabel("       Data inizio "); 
        DateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd");
        data_inizio = dateformat1.format(c2.getDate());
        
        JLabel label_spazio = new JLabel("        ");
        JLabel label_data_fine = new JLabel("       Data fine ");
        DateFormat dateformat2 = new SimpleDateFormat("yyyy-MM-dd");
        data_fine = dateformat2.format(c3.getDate());
        
        //Ti permette di scatenare l'evento del cambio data nel calendario con data minore
        c2.addPropertyChangeListener (new PropertyChangeListener () {
        public void propertyChange (PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals("date")) {
                DateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd");
                data_inizio = dateformat1.format(c2.getDate());
                   }         
                   }
                  });
        //Ti permette di scatenare l'evento del cambio data nel calendario con data maggiore
        c3.addPropertyChangeListener (new PropertyChangeListener () {
        public void propertyChange (PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals("date")) {
                DateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd");
                data_fine = dateformat1.format(c3.getDate());
                }
              }
              });
       //aggiunta alla toolbar dei vari "bottoni"
        tb.add(label_postazione);
        tb.add(combobox);
        tb.add(label_data_inizio);
        tb.add(c2);
        tb.add(label_data_fine);
        tb.add(c3);
        tb.add(label_spazio);
        tb.add(generateButton);
        return tb; 
      }  
      //Classe che crea la tabella
      class TableSQL extends JInternalFrame {
      TableSQL() {     
                    super("log_lavorazione_baie");
    		setDefaultCloseOperation(JInternalFrame.EXIT_ON_CLOSE);
    		// n° di colonne
    		int columns = 6;
    		// etichette colonne
    		String[] labels = {"postazione", "data_ora", "udt", "articolo","lotto","quantita"};
    		// larghezza colonne
    		int[] widths = {60, 120, 70, 100, 80, 70};
                    try {
                    String driver = "net.sourceforge.jtds.jdbc.Driver";
                    Class.forName(driver).newInstance();
        } 
                    catch (Exception e) {
                    JOptionPane.showMessageDialog(null,"Fallito il caricamento dei driver SQL.","ERRORE CARICAMENTO DRIVER SQL",JOptionPane.ERROR_MESSAGE);
    }
                    try {
                    Connection con1=null;
                    String postazione=selectedItem;
                    String tempo_min=data_inizio;
                    String tempo_max=data_fine;
                    //Connessione col database in cui vengono specificati url, nome utente, password
                    con1 = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/master", "us", "pw");         
                    Statement select1=con1.createStatement();
                    Statement select = con1.createStatement();
                    if(postazione.equalsIgnoreCase("Tutte")){
                        System.out.println("TUTTE");
                    // Query SQL 
                    String SQL_rows="SELECT count (postazione) FROM log_lavorazione_baie where data_ora>='" +tempo_min+"' and data_ora<='" +tempo_max+ "%'";
                    String SQL= "SELECT * FROM log_lavorazione_baie where data_ora>='" +tempo_min+"' and data_ora<='" +tempo_max+ "%'ORDER BY data_ora DESC";
                    //caricamento query SQL
                    ResultSet result2=select1.executeQuery(SQL_rows);
                    result2.next();
                    int ris_row=result2.getInt(1);
                    // n° di righe dinamico
                    rows = ris_row;
                    result1 = select.executeQuery(SQL);
       }
                    else{
                    System.out.println("Entra in cambio Combobox");
                    String SQL_rows_post="SELECT count (postazione) FROM log_lavorazione_baie where postazione='"+postazione+"' and data_ora>='" +tempo_min+"' and data_ora<='" +tempo_max+ "%'";
                    String SQL_post= "SELECT * FROM log_lavorazione_baie where postazione='"+postazione+"' and data_ora>='" +tempo_min+"' and data_ora<='" +tempo_max+ "%'ORDER BY data_ora DESC";
              	//caricamento query SQL
                    ResultSet result2=select1.executeQuery(SQL_rows_post);
                    result2.next();
                    int ris_row=result2.getInt(1);
                    // n° di righe dinamico
                    rows = ris_row;
                    result1 = select.executeQuery(SQL_post);
      } }
                    catch (Exception e) {
                    e.printStackTrace();
                    JOptionPane.showMessageDialog(null,"Connessione col database fallita","ERRORE CONNESSIONE DATABASE",JOptionPane.ERROR_MESSAGE);     
    }     
                    // vettore dati tabella
    		Vector data = new Vector(0, 1);
    		// vettore colonne tabella
    		Vector columnNames = new Vector(0, 1);
                    
    		// popolo la tabella
    		for(int i = 0; i < rows; i++) {
               try {
                    // vettore singola riga tabella
                    Vector row = new Vector();
                    result1.next();
                    for (int j = 1; j <= columns; j++) {
                        try {
                            row.addElement(result1.getString(j));
                            pw.print(result1.getString(j)+";");
                            
                            } 
                            catch (SQLException ex) {
                                                     Logger.getLogger(ControlloLog.class.getName()).log(Level.SEVERE, null, ex);
                                                      }
                    }
                    data.addElement(row);
                    pw.print("\n");
                     } 
                    catch (SQLException ex) {
                    Logger.getLogger(ControlloLog.class.getName()).log(Level.SEVERE, null, ex);
                                             }
    		}
    		// intestazioni colonne
    		for(int i = 0; i < columns; i++) {
    			columnNames.addElement(labels[i]);
    		}
    		// modello dati della tabella
    		DefaultTableModel tableModel = new DefaultTableModel(data, columnNames);
    		// modello attributi delle colonne
    		DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
    		for(int i = 0; i < columns; i++) {
    			// modello attributi colonna singola
    			TableColumn column = new TableColumn(i, widths[i]);
    			column.setHeaderValue(labels[i]);
    			columnModel.addColumn(column);
    		}
    		// la tabella
    		JTable table = new JTable(tableModel, columnModel);
                    table.setPreferredScrollableViewportSize(new Dimension(770, 500));
    		JScrollPane scroll = new JScrollPane(table);
    		getContentPane().add(scroll);
    		pack(); 
    		setLocation(0, 0);
                    setVisible(true);
    }}
      // Azioni dei pulsanti
      class GenerateButtonActionListener implements ActionListener { 
        public void actionPerformed(ActionEvent e) {        
                
                    pw = null;
                    try {
                    pw = new PrintWriter(new BufferedWriter(new FileWriter("C:\\Controlli.csv", false))); 
                    pw.print("postazione;data_ora;udt;articolo;lotto;quantita\n");       
                    tables = new TableSQL();
                    desktop.add(tables);
                    tables.moveToFront();    
                    pw.close();
                    } catch (IOException ex) {
                    Logger.getLogger(ControlloLog.class.getName()).log(Level.SEVERE, null, ex);
     }            
                    VisualizzaFile();
     }}  
      public void VisualizzaFile() {
              try
                    {
                    String nomeFile = "Controlli.csv";
                    Runtime rt = Runtime.getRuntime();
                    Process proc;
                    proc = rt.exec("cmd /C start " + nomeFile);
                    InputStream inp = proc.getInputStream();
                    OutputStream outp = proc.getOutputStream();
                    InputStream errp = proc.getErrorStream();
                    }
                    catch (Exception exc)
                    {
                    exc.printStackTrace();  } }
      class GenerateButtonActionListener1 implements ActionListener { 
        public void actionPerformed(ActionEvent e) { 
         pop.setVisible(false);
        } 
      }  
      class SelectionListener implements ActionListener { 
            public void actionPerformed(ActionEvent e) { 
            JComboBox cb = (JComboBox)e.getSource(); 
            selectedItem = (String)cb.getSelectedItem();      
          } 
        } 
      class AncestorListener implements ActionListener { 
          public void actionPerformed(ActionEvent e) { 
            JComboBox cb = (JComboBox)e.getSource(); 
            selectedItem = (String)cb.getSelectedItem(); 
          } 
        } 
      public static void main(String[] args) { 
        ControlloLog framec = new ControlloLog();
        framec.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      } 
    }

  6. #6
    Questa è la sua veste grafica:



    I problemi principali oltre a quelli citati sono nella tabella.
    Vorrei che i dati non fossero modificabili e se possibile con il tasto destro del mouse su una riga vorrei creare un menu.
    Secondo vorrei che quando spingo per la seconda volta su pulsante che crea la tabella, prima mi ELIMINASSE la tabella vecchia e poi mi creasse sopra quella nuova.

  7. #7
    Per risolvere in parte un problema potrei non considerare TableSQL come una classe che estende JInternalFrame, ma così facendo la tabella non mi si visualizza bene..

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da xxdavide84xx
    Vorrei che i dati non fossero modificabili
    Ma hai usato DefaultTableModel che per isCellEditable() ritorna sempre true. O estendi DefaultTableModel e fai l'override di questo metodo, oppure gestisci un "tuo" table model con una "tua" struttura dati (magari migliore del "Vector di Vector" di DefaultTableModel) estendendo AbstractTableModel.

    Originariamente inviato da xxdavide84xx
    con il tasto destro del mouse su una riga vorrei creare un menu.
    Si può fare. Ti basta gestire un MouseListener registrato sul JTable e poi in base al punto x/y fornito dall'evento MouseEvent, ricavi la riga e/o colonna usando alcuni metodi di JTable.

    Originariamente inviato da xxdavide84xx
    Secondo vorrei che quando spingo per la seconda volta su pulsante che crea la tabella, prima mi ELIMINASSE la tabella vecchia e poi mi creasse sopra quella nuova.
    Qui non è ben chiaro. Vuoi che tolga l'internal frame e ne crei un altro? O semplicemente che aggiorni i dati nel table model??


    P.S. comunque la cosa che vedo è che nel costruttore di TableSQL, mentre crei i Vector per il table model, scrivi anche sul PrintWriter i dati. Quello dovrebbe funzionare, no? (non ho controllato nei dettagli).

    Comunque quella tua mega classe ControlloLog è praticamente un macello. Incapsulazione ... zero, design ... zero. Fai il caricamento del driver più volte, crei connection più volte così .. tanto per fare. C'è tutto un miscuglio di gestione della interfaccia utente, gestione database, gestione file, gestione eventi, ecc....
    Le operazioni su file e database le fai nel contesto del EDT, il che vuol dire che se sono (potenzialmente) un po' lunghe, ti "congela" l'intera interfaccia utente.
    Insomma ... scrittura e design delle classi sarebbero altamente migliorabili.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Grazie dei sempre utilissimi consigli....
    Vorrei togliere il JInternalFrame e poi crearne un'altro...(in parole povere vorrei sempre avere una tabella SOLA e non tante sovrapposte come accade ora)

    Quindi come mi consigli di fare???
    Prima da una parte la connessione al database unica???
    Logicamente a blocchi come dovrei fare secondo te???


    Il pw funziona, ma come dicevo quando lo vado ad aprire mi apre il foglio di excel vuoto.
    Se invece non lo faccio aprire in automatico, ma lo apro io manualmente, nel file si vedono tutti i dati come dovrebbe essere.....

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da xxdavide84xx
    Grazie dei sempre utilissimi consigli....
    Vorrei togliere il JInternalFrame e poi crearne un'altro...(in parole povere vorrei sempre avere una tabella SOLA e non tante sovrapposte come accade ora)
    Ma allora perché usi JDesktopPane con 1 solo JInternalFrame???
    Metti nel JFrame la tabella (dentro il solito JScrollPane, ovviamente) e poi agisci solo sul table model!

    Originariamente inviato da xxdavide84xx
    Prima da una parte la connessione al database unica???
    Logicamente a blocchi come dovrei fare secondo te???
    Sarebbero da spezzare un po' di cose. Ad esempio "incapsula" la gestione del database in una classe a parte.

    Originariamente inviato da xxdavide84xx
    Il pw funziona, ma come dicevo quando lo vado ad aprire mi apre il foglio di excel vuoto.
    Se invece non lo faccio aprire in automatico, ma lo apro io manualmente, nel file si vedono tutti i dati come dovrebbe essere.....
    Beh però ... aspetta, lo vedo solo adesso: il PrintWriter lo apri su C:\Controlli.csv ma poi nella exec passi solo Controlli.csv.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.