Fazer com que seja executado uma determinada funcao de tempo em tempo

4 respostas
P

Bom dia pessoal,

Sou muito novo em Java e gostaria de algumas dicas!

No meu trabalho do TCC estou criando um código e estou com um problema.

Tenho uma classe em Java que faz a seguinte operação:

Tenho um jtextfield aonde o usuário ira digitar um código, e ao dar um enter o mesmo ira fazer uma consulta no banco mysql,
para ver se este código existe em uma determinada tabela. Até ai tudo normal funcionando!

Porém eu gostaria de adicionar uma função de tempo, para que de tempo em tempo por exemplo 20 segundos ele tecle este “enter” no jtextfield para fazer esta consulta.

Ou seja não seria necessário a pessoa teclar “enter” após digitar, pois de tempo em tempo ele realizaria esta consulta.
Tentei utilizar um exemplo de util.Timer e util.TimerTask porem sem sucesso.

Segue codigo da classe:

package project;

import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;




public class Layout extends javax.swing.JFrame {

  
    public Layout() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel = new javax.swing.JPanel();
        jLabel = new javax.swing.JLabel();
        TextField = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Assento Certo");
        setIconImages(null);

        jLabel.setText("QR Reader");

        TextField.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                TextFieldActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 11)); // NOI18N
        jLabel1.setText("Obs: Não fechar a aplicação!");

        javax.swing.GroupLayout jPanelLayout = new javax.swing.GroupLayout(jPanel);
        jPanel.setLayout(jPanelLayout);
        jPanelLayout.setHorizontalGroup(
            jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelLayout.createSequentialGroup()
                .addGroup(jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelLayout.createSequentialGroup()
                        .addGap(113, 113, 113)
                        .addComponent(jLabel)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelLayout.createSequentialGroup()
                        .addContainerGap(26, Short.MAX_VALUE)
                        .addGroup(jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(TextField, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap())
        );
        jPanelLayout.setVerticalGroup(
            jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelLayout.createSequentialGroup()
                .addComponent(jLabel)
                .addGap(18, 18, 18)
                .addComponent(TextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel1))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
        setLocationRelativeTo(null);
    }// </editor-fold>                        



    private void TextFieldActionPerformed(java.awt.event.ActionEvent evt) {                                          
        
    
        String buscacod = TextField.getText();
        TextField.setText(""); 
            
        
         //Conecta no banco com a classe ConexaoMysql
        Connection con = new ConexaoMySQL().getConexaoMySQL();
        
        //Realiza consulta no banco 
        try {
            
                String sql = "";
                Statement stmt;
                stmt = con.prepareStatement(sql);
                 
        //Variavel buscacod recebe valor do Text Fild e compara com valores do banco;
     
                ResultSet rs = stmt.executeQuery("Select cod_num from codigos where cod_num = '" + buscacod + "'" );
            
             if (rs.next()){  
               
                             JOptionPane.showMessageDialog(null,"Liberado");
                             java.awt.Desktop.getDesktop().open( new File( "C:\\Code\\OK.txt" ) ); 
               }
      
               else{
                    JOptionPane.showMessageDialog(null,"Codigo Invalido");
               }
        }
        
                 
         catch(Exception e){
            System.out.println(e.getMessage());
         }         
    }                                         
//fim action listener.
   // metodo main
    public static void main(String args[]) {
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Layout().setVisible(true);
            }
        });
        
        
    
    } //fim main
   
    // Variables declaration - do not modify                     
    private javax.swing.JTextField TextField;
    private javax.swing.JLabel jLabel;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel;
    // End of variables declaration                   
} // fim da classe

Desde ja Agradeço pessoal!

4 Respostas

filipi

Você já tentou utilizar Thread? Uma vez implementada, você poderá utilizar a função sleep, que deixará ela “adormecida” por determinado tempo. E logo após “acordar” ela chamará sua função que fará o calculo.

P

Ola Filipi,

Obrigado pela ajuda.

Então o Tread não adiantaria no meu caso, pq na verdade não é uma coisa que fica rodando a todo instante.
São consultas no banco então teria que ser alguma função ou algo assim que execute este meu metodo de tempo em tempo.
por exemplo o timer.task ou algo do genero, pois o timer nao funcionou na minha aplicação :frowning:

Se tiver mais alguma sugestão agradeço.

E

cara use um agendador, é muito simples e vc pode ter trocentos jobs rodando a hora q vc quiser
exemplo quartz sheduler

P

Edu muito Obrigado!

Utilizei o quartz e funcionou do jeito que eu gostaria.

Agora quando inicio a aplicação é só dar o start que o mesmo começa a contabilizar!

Obrigado pela ajuda. :slight_smile:

Criado 8 de setembro de 2014
Ultima resposta 10 de set. de 2014
Respostas 4
Participantes 3