Enviar System.out.println de uma Classe para um JLabel

9 respostas
B

Boa noite a todos!

Tenho uma classe que roda vários métodos, cada método gera uma informação, hoje estou vendo o resultado destes métodos pelo System.out.println(mensagem), só que preciso jogar essas mensagens em um Jlabel, da Frame principal, a cada momento em que um método é chamado.
Alguém teria uma solução para isso.

Desde ja agradeço.

Beto

9 Respostas

neto.jpa

Até a onde sei não se passa um System.out.println() para um JLabel.

Você pode passar o resultado do metodo e setar la no JLabel criado ex:

A classe que contem o JLabel faz o seguinte:

JLabel.setText(resultado);
B

Neto, ja fiz isso, mas ele não atualiza o jlabel.

@SuppressWarnings("static-access")
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        new Thread(new Runnable() {

            public void run() {
                try {
                    fc.conectar();
                    fc.ajusteSetorLeitura();
                    fc.ajusteDataHora();
                    fc.retornaFuncaoZero();
                    for (int i = 0; i <= 10; i++) {
                        jLabel1.setText(msg.getMensagem());
                        Thread.sleep(100);
                    }
                } catch (InterruptedException ex) {
                } finally {
                }
            }
        }).start();
    }
juno.rr

Estranho, vc já está chamando de uma Thread diferente da principal…
Já tentou chamar o método jLabel1.repaint();? Tenta tbm imprimir alguma coisa caso ocorra uma InterruptedException, tipo ex.printStackTrace();, pra saber se está rodando certo…

Valeu.

B

Juno, fiz o que você falou, mas mesmo assim não retornou nada, e nem gerou uma exceção.

@SuppressWarnings("static-access")
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        new Thread(new Runnable() {
            public void run() {
                try {
                    fc.conectar();
                    fc.ajusteSetorLeitura();
                    fc.ajusteDataHora();
                    fc.retornaFuncaoZero();
                    for (int i = 0; i <= 10; i++) {
                        jLabel1.setText(msg.getMensagem());
                        jLabel1.repaint();
                        Thread.sleep(100);
                    }
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } finally {
                }
            }
        }).start();
    }
Marky.Vasconcelos

Realmente é necessesario isso usar Threads?
Talvez se não usar funcione.

juno.rr

Estranho mesmo cara. Tentei reproduzir aqui e funcionou direitinho.
Olha só como eu fiz:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class LabelTest {

  private JLabel label;


  public LabelTest()
  {
    label = new JLabel();
    label.setSize(150, 25);
    label.setLocation(10, 10);
    label.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
  }

  public JLabel getLabel()
  {
    return label;
  }

  public void showMessages()
  {
    Thread th = new Thread(new Runnable() {
      @Override
      public void run()
      {
        for(int i = 0; i <= 10; i++) {
          label.setText("Message" + i);
          label.repaint();
          try
          {
            Thread.sleep(100);
          } catch (InterruptedException ex) { 
            ex.printStackTrace();
          }
        }
      }
    });
    th.start();
  }

  public static void main(String[] args)
  {
    JFrame f = new JFrame("LabelTest");
    f.setLayout(null);
    f.setSize(200, 120);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLocation(300, 300);

    final LabelTest test = new LabelTest();
    
    JButton button = new JButton("Start");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e)
      {
        test.showMessages();
      }
    });
    button.setBounds(10, 45, 80, 30);

    f.add(test.getLabel());
    f.add(button);

    f.setVisible(true);
  }

}

Olha o método “showMessages()”

Acho que é mais ou menos isso né? testa aí, se funcionar já sabemos que o problema tá no teu código (meio obvio acho, mas vai saber, pode ser a JVM…).

Segue o jar aí se quiser executar…

B

Juno, realmente esta classe funciona. O problema é que estou recebendo as mensagens de outra classe, e o jlabel, só atualiza com a última mensagem enviada pela classe.

Agradeço a força, se tiver alguma outra idéia, estou precisando!

vlw

neto.jpa

Você jáverificou se o que está acontecendo é que está modificando muito rápido e você só está vizualizando o ultimo resultado…???

B

Relamente as mensagens estavam sendo passadas muito rápidas.
[RESOLVIDO]

Criado 26 de fevereiro de 2010
Ultima resposta 15 de mar. de 2010
Respostas 9
Participantes 4