Atualizar JLabels em tempo real. A cada 5 segundos ler os arquivos.txt

6 respostas
D

Olá amigos do guj .

Estou numa luta com o java.

Não sei se esse é o caminho correto , mas depois de muita luta consegui o que queria : Pegar a primeira linha de dois arquivos.txt com esse codigo :

package netcontrol;


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.*;

/**
 *
 * @author deljdl
 */
public class Netcontrol {
    
    

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
   JFrame janela =new JFrame(); 
   JPanel painel =new JPanel();
   
   

//////////////////////// maximo

JLabel botaomax =new JLabel();
       
 String max="";
try {
BufferedReader leitor = new BufferedReader(new FileReader("/home/deljdl/scripts/max.txt"));

max = leitor.readLine(); 

//System.out.println(linha);

} catch (IOException e) {
}


botaomax.setText("Velocidade Máxima : "+max);

painel.add(botaomax);
////////////////////////////


//////////////////////// down

final JLabel botaodown =new JLabel();
       
 String down="";
try {
BufferedReader leitor = new BufferedReader(new FileReader("/home/deljdl/scripts/down.txt"));

down = leitor.readLine(); 



} catch (IOException e) {
}


botaodown.setText("Velocidade Atual : "+down);

painel.add(botaodown);
////////////////////////////









janela.add(painel);
        
        janela.setBounds(500,500, 200, 500);
janela.setVisible(true);//deixa a janela visivel
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 



}
       
                  
                
           
                     
      
             }

Mas esses arquivos.txt são modificados constantemente pelo proprio sistema. Como faço para atualizar meus JLabels em tempo real ? Tipo a cada 5 segundos ler os arquivos e atualizar os JLabels ?

6 Respostas

R

Brother, modifiquei seu código e deu certo:

import java.io.BufferedReader;   
import java.io.FileReader;   
import java.io.IOException;   
  
import javax.swing.*;   
  
/**  
*  
* @author deljdl  
*/   
public class Netcontrol {

    JLabel botaomax; 
    JLabel botaodown;
    JFrame janela;   
    JPanel painel; 
    String max=""; 
    String down="";     
       
     public Netcontrol()
       {
          janela =new JFrame();   
          painel =new JPanel(); 
          botaomax =new JLabel(); 
          botaodown =new JLabel(); 
          painel.add(botaomax);       
          painel.add(botaodown);   
          janela.add(painel);   
          janela.setBounds(500,500, 200, 500);   
          janela.setVisible(true);//deixa a janela visivel   
          janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       }  
  
    /**  
     * @param args the command line arguments  
     */   
    public static void main(String[] args) {   
              
    Netcontrol n = new Netcontrol();
    
    while(true)
     {
       n.net();
       temporizador();
     }
} 

   public void net()
   {         
    try {   
         BufferedReader leitor = new BufferedReader(new FileReader ("/home/deljdl/scripts/max.txt"));   
         max = leitor.readLine();   
        } catch (IOException e) {} 
     botaomax.setText("Velocidade Máxima : "+max);   
 
    try{ 
        BufferedReader leitor = new BufferedReader(new FileReader("/home/deljdl/scripts/down.txt"));  
        down = leitor.readLine();   
       } catch (IOException e) {} 
     botaodown.setText("Velocidade Atual : "+down); 
   }  

   public static void temporizador()
          {
            try
              {
               Thread.sleep(5000);
              }
            catch(InterruptedException e){}
          } 
         
                             
             }

Primeiro criei um método construtor e inicializei uns componetes ali.
O código restante que estava no método main eu coloquei no método chamado net.
O método main cria um laço infinito que chama o método net, criando os labels e após 5 segundos(através de temporizador()) volta a chamar net, atualizando os labels se houver alguma mudança nos arquivos .txt
Se houver problemas basta postar a dúvida.

R

deljdl ,

Acredito que a forma mais apropriada é criando uma Thread que leia esses arquivos.

Link sobre Thread em java: http://www.ime.usp.br/~gold/cursos/2004/mac438/threadsEmJava.pdf
Artigo sobre Thread no GUJ: http://www.guj.com.br/articles/43

Vou dar uma olhada no seu codigo , qualquer coisa te posto um exemplo.

R

É possível resolver esse problema com a classe Timer:

http://java.sun.com/products/jfc/tsc/articles/timer/

R

Fiz algumas modificações na sua classe segue exemplo sem Thread e outro Exemplo com Thread:

[edit] O arquivo max.txt e down.txt tem que estar onde é executado a aplicação pq mudei o caminho para testar aqui. :wink:

Sem Thread:

import java.io.BufferedReader;   
import java.io.FileReader;   
import java.io.IOException; 
import java.io.FileNotFoundException;  
  
import javax.swing.*;   
  
/**  
*  
* @author deljdl  
*/   
public class Netcontrol {

    JLabel botaomax; 
    JLabel botaodown;
    JFrame janela;   
    JPanel painel; 
    String max=""; 
    String down="";     
       
	BufferedReader leitorMax;
	BufferedReader leitorDown;
	
     public Netcontrol()
       {
          janela =new JFrame();   
          painel =new JPanel(); 
          botaomax =new JLabel(); 
          botaodown =new JLabel(); 
          painel.add(botaomax);       
          painel.add(botaodown);   
          janela.add(painel);   
          janela.setBounds(500,500, 200, 500);   
          janela.setVisible(true);//deixa a janela visivel   
          janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		  
		  try {
		  leitorMax = new BufferedReader(new FileReader ("max.txt"));
		  leitorDown = new BufferedReader(new FileReader("down.txt")); 
		  }catch(FileNotFoundException e) {
			e.printStackTrace();
			}
			
       }  
  
    /**  
     * @param args the command line arguments  
     */   
    public static void main(String[] args) {   
              
    Netcontrol n = new Netcontrol();
    
    while(true)
     {
       n.net();
       temporizador();
     }
} 

   public void net()
   {         
    try {   
         // leitorMax = new BufferedReader(new FileReader ("max.txt"));
         max = leitorMax.readLine();   
		 System.out.println(max);
		 
        } catch (IOException e) {} 
     botaomax.setText("Velocidade Máxima : "+max);   
 
    try{ 
        // leitorDown = new BufferedReader(new FileReader("down.txt"));  
        down = leitorDown.readLine();   
       } catch (IOException e) {} 
     botaodown.setText("Velocidade Atual : "+down); 
   }  

   public static void temporizador()
          {
            try
              {
               Thread.sleep(5000);
              }
            catch(InterruptedException e){}
          } 
         
                             
             }

Agora com Thread Classe NetcontrolNovo:

import javax.swing.*;   
 
/**  
*  
* @author deljdl  
*/   
public class NetcontrolNovo {

    JLabel botaomax; 
    JLabel botaodown;
    JFrame janela;   
    JPanel painel; 
    //String max=""; 
    //String down="";     
       
	//BufferedReader leitorMax;
	//BufferedReader leitorDown;
	
     public NetcontrolNovo()
       {
          janela =new JFrame();   
          painel =new JPanel(); 
          botaomax =new JLabel(); 
          botaodown =new JLabel(); 
          painel.add(botaomax);       
          painel.add(botaodown);   
          janela.add(painel);   
          janela.setBounds(500,500, 200, 500);   
          janela.setVisible(true);//deixa a janela visivel   
          janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		  
		 // try {
		  AtualizaTxt atualizaTxt = new AtualizaTxt(botaomax,botaodown);
		  
		  Thread thread = new Thread(atualizaTxt);
		  thread.start();
		  
		 // }catch( InterruptedException e) {
			//e.printStackTrace();
			//}
			
       }

	public static void main(String args[]) {
	
		NetcontrolNovo net = new NetcontrolNovo();
		
	}	 

}

Classe AtualizaTxt:

import javax.swing.JLabel;
import java.io.FileNotFoundException;
import java.io.FileReader;   
import java.io.IOException; 
import java.io.BufferedReader;   

public class AtualizaTxt implements Runnable {

BufferedReader leitorMax,leitorDown;
JLabel lbMax;
JLabel lbDown;
String max=""; 
String down=""; 

	public AtualizaTxt(JLabel labelMax,JLabel labelDown) {

		lbMax = labelMax;
		lbDown = labelDown;

			try {
				leitorMax = new BufferedReader(new FileReader ("max.txt"));
				leitorDown = new BufferedReader(new FileReader("down.txt")); 
			}catch(FileNotFoundException e) {
				e.printStackTrace();
			}


	}

public void run() {

	while(true) {
	
		try{
		
		Thread.sleep(5000);
		
			max = leitorMax.readLine();
			down = leitorDown.readLine();
			
		    lbMax.setText("Velocidade Máxima : "+max);   
			lbDown.setText("Velocidade Atual : "+down); 
		}catch(IOException e) {
			e.printStackTrace();
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	
}
	
}

Para compilar:

javac NetcontrolNovo.java AtualizaTxt.java

Executar:

java NetcontrolNovo

Espero ter ajudado.

R

Acresentando os arquivos max.txt e down.txt que usei:

max.txt:

200kbps
300kbps
500kbps
1200kbps
200kbps
300kbps
1mbps
10mbps
0kbps
1000Mbps

Arquivo down.txt

1200kbps
2300kbps
3500kbps
41200kbps
5200kbps
6300kbps
11mbps
110mbps
1kbps
D

Muito obrigado mesmo. Descupem a demora mas é que não recebi o aviso de " nova resposta " por email.

Mas muito obrigado mesmo, ficou perfeito.

Criado 19 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 6
Participantes 4