| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 15:00:34
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Boa tarde a todos,
Estou criando uma aplicação que faz a leitura de um arquivo .XML, gravando as informações em um .TXT
No entanto, tenho por objetivo em criar uma interface gráfica para o mesmo, onde peço a colaboração de vocês.
Estou utilizando as ferramentas do próprio Netbeans, onde a interface gráfica será básica..
A interface será composta por:
-jTextField que recebe o caminho do arquivo, após selecionar o mesmo, através do JFileChooser(Está Ok).
-jProgressBar e jLabel, para mostrar o progresso do processo.
-jButton, para iniciar o processo.
O problema está no momento em que clico no jButton para processar as informações, sabendo-se após efetuar o mesmo, a interface fica desabilitada para fazer outras informações, até que conclua a aplicação da classe que meu jButton chamou, ou seja, não consigo fechar a aplicação, somente pelo próprio Java.
E meu objetivo era que assim que chamasse a minha classe para efetuar a leitura do XML e gravar em um .txt, a cada registro gravado, incrementasse em meu jProgressBar..
Trecho da minha classe LerXML:
Classe JFrame (Interface gráfica):
Ou seja, esse código, foram algumas tentativas, no entanto, aguardo por mais orientações.
Desde já Agradeço, Eduardo.
This message was edited 2 times. Last update was at 29/01/2012 23:10:02
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 15:50:34
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Movido para o fórum de interface gráfica.
E... para resolver o seu problema, coloque o processamento do JButton dentro de uma thread separada.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 15:54:47
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
E... para resolver o seu problema, coloque o processamento do JButton dentro de uma thread separada.
Desculpe-me Viny, mas meu conhecimento é muito limitado,
Quando diz thread, refere-se a que?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 16:19:40
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
A thread mesmo.  http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html http://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html
This message was edited 1 time. Last update was at 29/01/2012 16:21:09
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 17:16:46
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Com a utilização de threads. Será possível resolver o meu problema?
Pelo que eu pude compreender, as threads são utilizadas quando tenho a necessidade de executar mais de um processo ao mesmo tempo..
Esses processos devem ser distintos ou podem ser interligados?
Pois tenho por objetivo que minha jProgressBar atualize conforme a execução da minha classe LerXML, assim que eu pressionar o jButton.
Haveria possibilidade de parar a execução da minha classe LerXML no meio do processo?
Att, Eduardo Pereira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 18:34:10
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Agradecido Vinny;
Fiz o teste, conforme me orientou, no entanto, obtive sucesso.
O problema está em acessar meu jProgressBar, pois estou implementando diretamente pelo Netbeans e o mesmo é private, onde preciso acessá-la de outra classe, sabendo-se que dá erro se eu criar um método set sem ser privado..
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 18:45:58
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Poste aqui o método do botão que dispara o processamento pesado.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 18:53:18
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Método do botão:
Método Run:
Trecho do Método lerXML:
Ou seja, dentro do "for" do meu Método "lerXML" eu gostaria de atualizar meu jProgressBar, mas o que está complicando é que o meu jProgressBar é private da minha classe JFXML, então não consigo acessar ele..
This message was edited 1 time. Last update was at 29/01/2012 18:55:04
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 19:04:46
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Na realidade não saberia dizer se é devido o modificador, mas gostaria de saber como farei para acessar meu jProgressBar
Desde Já Agradeço, Eduardo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 19:46:34
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Então Vinny..
Fiz diferente agora, ao invés de criar objetos para acessar a minha outra classe..
inclui ela na minha classe principal como métodos, no entanto, segue o código completo de minha classe principal:
This message was edited 1 time. Last update was at 29/01/2012 19:49:43
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 20:33:18
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Tente deixar assim, criando apenas uma inner para sua thread:
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2012 23:08:48
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Funcionou Vinny!
Sou grato novamente pela colaboração.
Sabendo que não é a primeira vez que tem me ajudado, no entanto, uma vez você me disse que o importante é compreender o funcionamento do mesmo, não apenas ver o negócio funcionando. Portanto, você poderia me explicar as alterações no método Run e do meu jButton?
Att, Eduardo Pereira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 07:52:46
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
O que eu usei ali foi um conceito chamado de Inner Class (classe interna) anônima:
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Sempre que você faz:
Você está criando uma classe filha de UmaClasseQualquer, e sobrescrevendo os métodos, nesse caso, umMetodoQualquer().
Uma das vantagens das classes internas é que elas podem enxergar as partes privadas da classe que as contém.
Por isso, o Runnable que criei na forma de uma inner class pode chamar diretamente o método lerXML().
Esse runnable foi passado como construtor da classe Thread e, ao chamarmos o método .start(), disparou uma nova thread, que percorreu o método lerXML().
É necessário usar 2 threads pois o Swing não irá atualizar a tela até que seu evento termine de executar. Com uma thread separada, a execução do evento termina imediatamente, deixando o Swing livre para processar as demais tarefas de interface gráfica.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 18:23:30
|
mcirqueira
JavaChild
![[Avatar]](/images/avatar/b76dbcdb50233a9ac2503749fd0037a5.jpg)
Membro desde: 19/07/2011 15:31:29
Mensagens: 128
Localização: São Luís - Maranhão
Online
|
Boa noite!
Você pode postar o programa completo?
|
Entrem lá no meu blog:
http://www.marciomeucanto.blogspot.com.br/
"Em terra onde não há carne, urubu é frango."
"Caíste sozinho ou foi o camelo que te arremessou? Tanto faz: o fato é que eu caí."
"Por causa da rosa, a erva daninha acaba sendo regada."
"Um centavo economizado é um centavo ganho."
"Todos os gatos adoram peixe, mas odeiam ficar com as patas molhadas."
"Com a mentira se consegue o almoço, mas não o jantar."
"Alimenta teu cão e ele guardará tua casa; faze jejuar teu gato e ele te comerá os ratos."
Não fazem mais GNU/Linux como antigamente!=)
Você não precisa ser inteligente, basta ter motivação.
"Tudo tem o seu tempo determinado, e há tempo para todo o propósito debaixo do céu", Ec 3,1
"Se quer ser famoso, faça um bom programa de código livre, se quer dinheiro, escreva um pago e não sendo código livre"
http://www.facebook.com/mcirqueira11/
Eu e Deus !!! EnJAVAndo os Neurônios!!!
while (EuViver() == true ){
Estudo();
Trabalho();
LouvarDeus();
} |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 18:25:57
|
cajubino
Thread.start()
Membro desde: 14/08/2011 03:44:36
Mensagens: 40
Offline
|
Terá que ser em partes, devido a extensão do mesmo.
Mas de qualquer forma o problema já foi resolvido, agradeço a colaboração.
This message was edited 2 times. Last update was at 30/01/2012 18:51:17
|
|
|
 |
|
|