[RESOLVIDO]jProgressBar1  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
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

ViniGodoy
Moderador
[Avatar]

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
[WWW]
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?
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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
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..
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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

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.
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

ViniGodoy
Moderador
[Avatar]

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
[WWW]
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
ViniGodoy
Moderador
[Avatar]

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
[WWW]
mcirqueira
JavaChild
[Avatar]

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();
}
[Email] [WWW]
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

 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team