Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22

    Java Application per Dati in continuo aggiornamento

    Salve a tutti,

    come dice il titolo, dovrei realizzare una semplice interfaccia per mostrare dei dati che si aggiornano ogni 10n minuti.

    I dati provengono da un DB MySql al quale mi collego tranquillamente e dal quale già estraggo i dati.
    Difatti, riesco ad aprire una finestra JFrame e settare il testo di tre jLabel con i valori che prendo dal DB. Il punto è che ora mi serve che ogni 10 minuti queste jLabel mi si aggiornino automaticamente.

    Ho provato con il creare una classe MyTask che estende TimerTask, così facendo, nel metodo run() di cui occorre fare l'override, riesco a stampare con System.out.println i dati in continuo aggiornamento... ma non riesco in alcun modo a fare in modo che mi si aggiornino le jLabel del JFRame su cui sono poggiate (ammesso che le jLabel ed il JFrame siano la soluzione al problema).

    Chi mi può dare una mano?

    Grazie in antcipo!
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Java Application per Dati in continuo aggiornamento

    Originariamente inviato da Framek
    ma non riesco in alcun modo a fare in modo che mi si aggiornino le jLabel del JFRame su cui sono poggiate (ammesso che le jLabel ed il JFrame siano la soluzione al problema).
    Chiaramente, per poter aggiornare le JLabel, queste devono essere "raggiungibili" dal TimerTask... ovvero, dovrai passare i riferimenti alle JLabel da aggiornare al TimerTask, oppure passare un riferimento alla finestra, la quale però dovrà esporre dei metodi appositi per la ricezione dei nuovi dati, in modo da aggiornarli sulle labels.

    Posta la classe TimerTask che hai sviluppato... probabilmente ti manca solo un passaggio.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22
    Ciao LeleFT e grazie per avermi risposto così tempestivamente...

    quello che ho fatto io è la seguente:

    Ho creato la classe MyTask cosi di seguito:

    codice:
    package applicazione;
    
    import java.sql.SQLException;
    import java.util.TimerTask;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class MyTask extends TimerTask {
        
        public String valore1;
        public String valroe2;
        
        Controllore c = new Controllore();//mi offre la connessione al DB e le query ad hoc
             
        @Override
        public void run() {
            
            try {
                    valore1 = c.recuperaValore1().toString();
                    valore2 = c.recuperaValore2().toString();
             System.out.println("Valore1: "+valore1+" Valore2:"+valore2);
            } catch (SQLException ex) {
                Logger.getLogger(MyTask.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }//MyTask.java
    >>>Quando dalla classe Monitor richiamo MyTask con "t.schedule(tm, 10,6*1000);" le label si settano con il valore del momento ed in netbeans, nell'output, la Syste.out... mi continua a lavorare bene (Ho lasciato infatti nel metodo run() in MyTask la stampa apposta)<<<

    La classe che estende JFrame e sulla quale vi sono le JLAbel in questione la riporto di seguito. Questa classe viene lanciata da una classettina con un main ed il classico "new Monitor().setVisible(true)":

    codice:
    package applicazione;
    public class Monitor extends JFrame {
        
        Controllore c = new Controllore();
        Timer t = new Timer();
        TimerTask tm = new MyTask();
        private String Valore1;
        private String VAlore2;
             
        public Monitor() throws InterruptedException, SQLException {
           
            int xf = Toolkit.getDefaultToolkit().getScreenSize().width;
            int yf = Toolkit.getDefaultToolkit().getScreenSize().height;
            setBounds(xf/3, yf/6, 600, 600);
            
            initComponents();
            t.schedule(tm, 10,6*1000);
            aggiornaDatiLabel();
        }
    
      private void aggiornaDatiLabel() throws SQLException, InterruptedException {
            
            jLabel1.setText(valore1 = c.recuperaValore1().toString());
            jLabel2.setText(valore2 = c.recuperaValore2().toString());
            }
        
     @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            jLabel1 = new javax.swing.JLabel();
            jLabel2 = new javax.swing.JLabel();
           
            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    
            jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            jLabel1.setText("jLabel1");
    
            jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            jLabel2.setText("jLabel2");
    
            jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            jLabel3.setText("jLabel3");
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(97, 97, 97)
                    .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(105, 105, 105)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
                    .addGap(45, 45, 45))
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3))
                        .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addComponent(jLabel1)
                    .addContainerGap(245, Short.MAX_VALUE))
            );
            pack();
        }// </editor-fold>                        
        // Variables declaration - do not modify                     
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel3;
        // End of variables declaration                   
    }
    Spero di essere stato chiaro nell'esposizione del mio operato ma spero di più in una tua soluzione!
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

  4. #4
    Utente di HTML.it L'avatar di Framek
    Registrato dal
    Apr 2010
    Messaggi
    22
    Finalmente ho risolto... Il passo era semplice bastava ricordarsi un po l'utilzzo dei thread.
    Ho invatti acceso un thread e l'ho messo in sleep per 100millisecondi prima di richiamare il metodo che mi aggiorna le label.
    Se interessa chiedetemi che inserisco tutto il codice.

    Ciao
    L'importante è non smettere di interrogarsi. La curiosità ha una precisa raggione per l'esistenza!

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.