Boa tarde!
Eu tenho uma Thread, como faço para poder jogar uma mensagem para um jTextField enquanto a thread estiver rodando?
Boa tarde!
Eu tenho uma Thread, como faço para poder jogar uma mensagem para um jTextField enquanto a thread estiver rodando?
Use o comando:
EventQueue.invokeLater(new Runnable() {
public void run() {
seuTextField.setText(valor);
}
});
Mas claro, seu problema talvez seja como obter a variável seuTextField. Nesse caso, passe o JTextField como parâmetro para a classe da thread. Outra opção é fazer a thread disparar um evento.
È gambiarra se eu declarar um jTextField estático da página principal para receber as informações da Thread, neste caso é a página principal que invoca a Thread, mas a Thread é um arquivo separado da página prncipal…
O que eu fiz funcionou, apenas gosatria de saber se isso é gambiarra?
[quote=ricardoluizv]È gambiarra se eu declarar um jTextField estático da página principal para receber as informações da Thread, neste caso é a página principal que invoca a Thread, mas a Thread é um arquivo separado da página prncipal…
O que eu fiz funcionou, apenas gosatria de saber se isso é gambiarra?[/quote]
Totalmente gambiarra.
Primeiro, porque você não vai chamar o invokeLater nele, e campos tem que ser atualizados pela Thread do Swing. Depois, você não vai conseguir abrir duas instâncias dessa tela. Além disso, a tela não será coletada pelo garbage collection e você terá problemas de sincronização. Além disso, qual é o problema de passar o JTextField como parâmetro?
Essa Thread possui uma hirearquias de funções se eu passar o jTextBox como parâmetro vou ter um problema de complexidade no código e vou perder o total controle de envio no extato momento que a ação está funcionando para o jTextBox, e porque invocar o invokeLater? E porque não pode ser dessa forma se o jTextBox sempre deverá ficar declarado para qualquer situação?
Em termos de perda de controle, o static é mais problemático. Como ele é como se fosse uma variável global, você pode ter problemas sérios ao utiliza-lo. Lembre-se que static será compartilhado entre todas as classes que resolverem ler ou ouvir a variável, e isso é especialmente pior quando vc tem um contexto multi-thread.
O invokeLater é necessário porque somente a Thread do Swing pode atualizar o Swing:
http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html
http://java.sun.com/products/jfc/tsc/articles/threads/threads3.html
http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
Entendi…
Digamos que eu chame a Thread na minha tela principal e passe por parâmetro o jTextField, ok! Eu posso chamar uma Thread chamada imprimeStatus e passar como parâmetro o esse jTextField que passei, e toda vez que eu precisar imprimir uma mensagem eu chamo um método estático dentro desta thread imprimeStauts que se encarrega de fazer o invokerLater…
obs: Neste caso as Thread’s segue um padrão hireárquico…
Isso eu poderia fazer?
Primeiro de tudo, se você vai trabalhar com multithreading, risque do seu vocabulário a palavra static. Nada de métodos estáticos, variáveis estáticas, etc. O máximo que vc vai usar são constantes estáticas e, ainda assim, só de objetos imutáveis.
O que você quer dizer com “as threads seguem um padrão hierarquico”? Quantas threads vc tem afinal, e para que elas servem?
Geralmente, se você tiver várias threads, o ideal é ter outra só para imprimir o status. No caso, pode ser a própria thread do Swing já que o método invokeLater atua como uma fila de mensagens.
Entendi… muito obrigado pela ajuda!
Ola a todos, estou criando uma aplicação, e presciso que essa aplicação envie uma mensagem a todos os usuários, que estiverem completando ano de vida na data em questão, exemplo da mensagem: um JFrame com JTextArea contendo a mensagem :!:
Grave a mensagem no banco de dados… quando fizer a consulta para mostrar a mensagem na tela filtra pela data no SQL… A data que você passará será data de aniversário que o usuário tem no cadastro.
Se for mensagem via e-mail, é só fazer uma conslta e listar todos os usuários que fazem aniversário nesta data, faz um loop e envia a mensagem para esses usuários
Espero ter ajudado!
Será q vc poderia manda um exemplo em código??? :?:
Diga exatamente onde está sua dúvida. Você sabe usar banco de dados? Sabe comparar datas? Que tal criar seu próprio tópico para a dúvida?
Não pegue carona no tópico dos outros. Como esse tópico era sobre Threads (um assunto bastante difícil), poucos o visitarão e vc mesmo sairá prejudicado;
O autor desse tópico, e todos que participaram dele, ficarão recebendo e-mails quando vc tratar seu novo assunto, que pode não ser do interesse deles.
É que eu sou novo no forúm e não sei bem com tratar esse assunto!!! :-o