| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 09:19:23
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
Bom Dia Galera,
estou realizando um Software de Controle de Obrigações para um Escritorio de Contabilidade.
Em um "JFrame", tenho um "JPanel" que exibo a Tabela dos Clientes. Quando o usuario seleciona uma linha e clica em editar, eu instancio um JDialog chamado "Cliente" e defino setVisible(true), setModal(true). No momento que realizo as edições no JDialog que clico no Butão Editar, ele realiza as alterações e executa o comando dispose() normalmente, o problema é que ele fecha, e tambem trava o meu JFrame.
Alguem sabe o motivo deste problema?
Se for necessario mais informações, só avisar.
Obrigado!
This message was edited 4 times. Last update was at 31/01/2012 18:31:40
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 10:13:03
|
mauricioadl
GUJ Master
![[Avatar]](/images/avatar/0958560bd45062d115debadb6bca3183.png)
Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline
|
poe o fonte pra ver se tem algo errado. muito estranho esse problema seu.
|
Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 12:04:49
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Tópico movido para o fórum 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 13:28:45
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
mauricioadl wrote:poe o fonte pra ver se tem algo errado. muito estranho esse problema seu.
To no trabalho, e to sem o Código fonte aqui.
Mais tipo, quando instancio o JDialog, eu to chamando ele usando (this, false).
Tem alguma coisa haver?
Poderia me explicar o que são esses parametros "this" e "false". Pelo que li o false vai dizer se é modal ou não. To errado?
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 13:55:26
|
discorpio
Virtual Machine Man
Membro desde: 06/02/2010 18:46:46
Mensagens: 547
Localização: Rio de Janeiro
Offline
|
Boa tarde MarcioMaia.
MarcioMaia wrote:
mauricioadl wrote:poe o fonte pra ver se tem algo errado. muito estranho esse problema seu.
To no trabalho, e to sem o Código fonte aqui.
Mais tipo, quando instancio o JDialog, eu to chamando ele usando (this, false).
Tem alguma coisa haver?
Poderia me explicar o que são esses parametros "this" e "false". Pelo que li o false vai dizer se é modal ou não. To errado?
Sim, tem tudo haver.
Um dos modos que se podem instanciar um JDialog e passando os seguintes parâmetros:
Isto significa dizer que o primeiro parâmetro indica o frame proprietário do JDialog, neste caso, voce está passando a cláusula implícita "this" que indica que o prorpietário do JDialog será o Frame ou JFrame de onde voce está abrindo e o segundo parâmetro que é booleano, indica se ele será Modal ou não, no seu caso, voce o está abrindo de forma não modal, isto significa dizer que ele não bloqueará o foco no JDialog enquanto estiver aberto.
Não se porque ele está travando o Frame de onde você o abriu, contudo dentro do frame ou JFrame que você o abriu, após ele fechar, atribua um valor "null" para sua referência na instrução logo abaixo de sua abertura (Instância), mais ou menos assim:
Um abraço.
This message was edited 3 times. Last update was at 30/01/2012 14:06:28
|
O Senhor é meu Pastor e nada me faltará. (Sl. 23:01) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 14:10:59
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
discorpio wrote:Boa tarde MarcioMaia.
MarcioMaia wrote:
mauricioadl wrote:poe o fonte pra ver se tem algo errado. muito estranho esse problema seu.
To no trabalho, e to sem o Código fonte aqui.
Mais tipo, quando instancio o JDialog, eu to chamando ele usando (this, false).
Tem alguma coisa haver?
Poderia me explicar o que são esses parametros "this" e "false". Pelo que li o false vai dizer se é modal ou não. To errado?
Sim, tem tudo haver.
Um dos modos que se podem instanciar um JDialog e passando os seguintes parâmetros:
Isto significa dizer que o primeiro parâmetro indica o frame proprietário do JDialog, neste caso, voce está passando a cláusula implícita "this" que indica que o prorpietário do JDialog será o Frame ou JFrame de onde voce está abrindo e o segundo parâmetro que é booleano, indica se ele será Modal ou não, no seu caso, voce o está abrindo de forma não modal, isto significa dizer que ele não bloqueará o foco no JDialog enquanto estiver aberto.
Não se porque porque ele está travando o Frame de onde você o abriu, contudo dentro do frame ou JFrame que você o abriu, após ele fechar, atribua um valor "null" para sua referência na instrução logo abaixo de sua abertura (Instância), mais ou menos assim:
Um abraço.
Obrigado por seus comentarios.
Estou instanciando o Jdialog da seguinte forma:
E sobre setar como null, no caso, quando o usuario clicar em editar, la no final eu seto dispose() para fechar o Jdialog, eu tenho que:
Instanciar novamente, e setar como null?
A parte dos parametros entendi perfeitamente, agora sobre setar null não entendi muito bem.
Meu problema, é que quando eu realizo as alterações necessarios, eu dou dispose() e o Jdialog fecha, travando assim o meu Jframe.
Como não estou em casa, estou sem o codigo fonte aqui para postar, mais assim que chegar posto para ver uma possivel ajuda.
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 14:27:12
|
discorpio
Virtual Machine Man
Membro desde: 06/02/2010 18:46:46
Mensagens: 547
Localização: Rio de Janeiro
Offline
|
Olá Marcio.
Você confundiu tudo.
Não é setar um parâmetro do JDialog com "null" e sim atribuir o valor "null" a sua instância logo após ele ser fechado.
O que pode estar acontecendo com a sua aplicação é que o JDialog, momentos antes de fechar, esteja realizando algum procedimento de gravação no banco de dados do Cliente, e que esteja levando algum tempo para realizar isto, e talvez você deve estar clicando no fechamento do JDialog antes mesmo dele terminar esta operação.
Antes de fechar o seu JDialog, verifique se a gravação do registro foi terminada, criando implementação dentro do próprio JDialog reescrevendo o método dispose() do JDialog.
Um abraço
This message was edited 1 time. Last update was at 30/01/2012 14:34:53
|
O Senhor é meu Pastor e nada me faltará. (Sl. 23:01) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 15:49:09
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
discorpio wrote:Olá Marcio.
Você confundiu tudo.
Não é setar um parâmetro do JDialog com "null" e sim atribuir o valor "null" a sua instância logo após ele ser fechado.
O que pode estar acontecendo com a sua aplicação é que o JDialog, momentos antes de fechar, esteja realizando algum procedimento de gravação no banco de dados do Cliente, e que esteja levando algum tempo para realizar isto, e talvez você deve estar clicando no fechamento do JDialog antes mesmo dele terminar esta operação.
Antes de fechar o seu JDialog, verifique se a gravação do registro foi terminada, criando implementação dentro do próprio JDialog reescrevendo o método dispose() do JDialog.
Um abraço
discorpio, obrigado novamente por seus comentarios.
Realmente estou realizando varias alterações no banco de dados momentos antes de eu da dispose() no meu JDialog.
Irei testar se depois de algum tempo o JFrame destrava.
Agradeço por sua ajuda, assim que chegar em casa irei realizar os testes e posto aqui novamente.
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 19:19:21
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
discorpio wrote:Olá Marcio.
Você confundiu tudo.
Não é setar um parâmetro do JDialog com "null" e sim atribuir o valor "null" a sua instância logo após ele ser fechado.
O que pode estar acontecendo com a sua aplicação é que o JDialog, momentos antes de fechar, esteja realizando algum procedimento de gravação no banco de dados do Cliente, e que esteja levando algum tempo para realizar isto, e talvez você deve estar clicando no fechamento do JDialog antes mesmo dele terminar esta operação.
Antes de fechar o seu JDialog, verifique se a gravação do registro foi terminada, criando implementação dentro do próprio JDialog reescrevendo o método dispose() do JDialog.
Um abraço
discorpio esta aqui o evento que chama o jdialog
Metodo que preencher os JTexts.
Quando clico no botão salvar, ele gera o evento abaixo:
Agradeço a sua ajuda.
This message was edited 2 times. Last update was at 30/01/2012 19:24:17
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 10:24:43
|
discorpio
Virtual Machine Man
Membro desde: 06/02/2010 18:46:46
Mensagens: 547
Localização: Rio de Janeiro
Offline
|
Bom dia Marcio.
Eu não entendi duas coisas no seu código:
1º) Por quê você declarou o método de preencher JPaneCDC1Editar com estático
Talvez isto tenha influência nas exceções (erros) lançados na sua aplicação, veja bem, eu disse talvez, porém quando declaramos métodos estáticos é para uma necessidade de utilizarmos esse método sem instanciar o objeto que o contém, fazendo apenas referência com o nome da Classe JDialog seguida de um ponto e o nome do método. Ex.
Como você terá a necessidade de instanciar a classe Cliente, eis que você necessita mostrar a parte visual do seu Editor de Clientes, logo não há necessidade de declarar este método como estático, pois voce pode acessá-lo através de sua instância.
Temos que ter o cuidado de ficar declarando métodos estáticos (static) demais em nossa aplicação, pois os métodos estáticos são como métodos globais, que quando a aplicação se inicia, eles logo são armazenados em memória, independente da classe onde estão declarados, e é por isso que eles são considerados apenas métodos de classe e não de instância.
2º) Como assim se setar o parâmetro como true os JTextFields não preenchidos.
Tudo depende de como você implementou o construtor da classe Cadastrar_Cliente. Se o segundo parâmetro não estiver configurando como modal, então você deve invocar o seu método setModal(true), porém se estiver passando parâmetros, então por quê não passar também o parâmetro modal
Talvez o que esteja travando o seu JFrame não seja o JDilog Cadastrar_Cliente, mas este código abaixo:
Imagine se a sua tabela contiver 105.500 registros e esteja jogando tudo para dentro do seu JTable. Já imaginou Não será apenas o registro que você inseriu ou editou ou será
Melhor seria também se você colocasse aqui o código do construtor da classe JDialog Cadastrar_Cliente.
Um abraço
|
O Senhor é meu Pastor e nada me faltará. (Sl. 23:01) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 11:02:52
|
drsmachado
GUJ Expert
Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline
|
Bom, faz muito tempo que não me meto com JSE, mas, por que você não tenta criar uma nova thread para o JDialog?
Afinal, todos os componentes (e o que mais você criar) a partir de um JFrame irão compartilhar a mesma thread.
Abra o google chrome e o mozilla. Em cada um deles abra várias abas e, em cada um, as mesmas abas abertas do outro.
Abra o gerenciador de tarefas e analise qual consome mais recursos e qual divide os recursos em threads separadas.
Qual é mais lento?
Enfim, separando o processo do JDialog do principal, você ganha tempo e performance.
|
Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".
Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 11:30:03
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Já tentou usar um depurador no seu JFrame?
|
@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) 31/01/2012 12:32:10
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
1º) Por quê você declarou o método de preencher JPaneCDC1Editar com estático
view plaincopy to clipboardprint?
......
public static void preencherJpaneCDClEditar(Integer id_edicao){
.....
// Deveria ser assim
public void preencherJpaneCDClEditar(Integer id_edicao){
......
public static void preencherJpaneCDClEditar(Integer id_edicao){
.....
// Deveria ser assim
public void preencherJpaneCDClEditar(Integer id_edicao){
Talvez isto tenha influência nas exceções (erros) lançados na sua aplicação, veja bem, eu disse talvez, porém quando declaramos métodos estáticos é para uma necessidade de utilizarmos esse método sem instanciar o objeto que o contém, fazendo apenas referência com o nome da Classe JDialog seguida de um ponto e o nome do método. Ex.
view plaincopy to clipboardprint?
// Onde Cadastrar_Cliente é a classe e não a instância
Cadastrar_Cliente.preencherJpaneCDClEditar(100);
// Onde Cadastrar_Cliente é a classe e não a instância
Cadastrar_Cliente.preencherJpaneCDClEditar(100);
Como você terá a necessidade de instanciar a classe Cliente, eis que você necessita mostrar a parte visual do seu Editor de Clientes, logo não há necessidade de declarar este método como estático, pois voce pode acessá-lo através de sua instância.
Temos que ter o cuidado de ficar declarando métodos estáticos (static) demais em nossa aplicação, pois os métodos estáticos são como métodos globais, que quando a aplicação se inicia, eles logo são armazenados em memória, independente da classe onde estão declarados, e é por isso que eles são considerados apenas métodos de classe e não de instância.
Boa Tarde Discorpion,
muito obrigado por seus comentarios.
Sou um tanto amador em Programação. Estou iniciando agora esta ardua carreira. Estou no 2º Semestre de Sistema da Informação, e comecei a estudar Java lendro o Livro da Deitel.
Em relação a declarar como Estático, eu não tinha o conhecimento sobre a utilização do mesmo, pois não sabia que poderia acessá-lo através da instância, só acessava pela Classe.
Mais entendi perfeitamente o que você mencionou. Obrigado!
2º) Como assim se setar o parâmetro como true os JTextFields não preenchidos.
view plaincopy to clipboardprint?
// Se eu setar aqui como true, ele não preenche os meus JText no JDialog.
Cadastrar_Cliente editar_cliente = new Cadastrar_Cliente(this, false);
// Para depois setá-lo como modal
editar_cliente.setModal(true);
Quando seto no JDialog Cadastrar_Cliente setModal = true, no momento que o meu JDialog é aberto, ele não preenche os JTexts existentes.
O metodo [Cadastrar_Cliente.preencherJpaneCDClEditar(cdc_id);] é responsavel por preencher os Meus JTexts que estão inseridos no meu JDialog.
Como estou no trabalho, não tenho como realizar os testes. Mais vou mudar o metodo para não estatico, e chamar pela instancia já criada.
Talvez o que esteja travando o seu JFrame não seja o JDilog Cadastrar_Cliente, mas este código abaixo:
view plaincopy to clipboardprint?
SimpleTableModel.PreenchendoTabelaCliente();
SimpleTableModel.tabelaCliente.updateUI();
No caso, esta tabela Cliente, só tem 8 registros. Mais a informação passada vai ser valida para quando tiver mais registros.
Discorpion obrigrado por sua ajuda, e desculpe a falta de conhecimento. Mais é uma quantidade muito grande de informação, e até assimilar tudo é preciso horas e horas de programação. (=
Bom, faz muito tempo que não me meto com JSE, mas, por que você não tenta criar uma nova thread para o JDialog?
Afinal, todos os componentes (e o que mais você criar) a partir de um JFrame irão compartilhar a mesma thread.
Abra o google chrome e o mozilla. Em cada um deles abra várias abas e, em cada um, as mesmas abas abertas do outro.
Abra o gerenciador de tarefas e analise qual consome mais recursos e qual divide os recursos em threads separadas.
Qual é mais lento?
Enfim, separando o processo do JDialog do principal, você ganha tempo e performance.
Ainda não estudei Treads, mais irei estudar sua solução.
Já tentou usar um depurador no seu JFrame?
ViniGodoy, desculpe a falta de conhecimento.
Mais do que se trata este depurador?
Obrigado a todos pela ajuda!
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 12:50:31
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
Você está fazendo:
E deveria fazer:
O modal deverá ser setado antes da visualização da janela.
Aproveite e coloque um Sysout após o método setVisible(). Assim quando você executar o dispose() ele deverá mostrar o trace:
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 13:01:05
|
MarcioMaia
Debugger
Membro desde: 03/09/2011 21:44:35
Mensagens: 67
Offline
|
lina wrote:Oi,
Você está fazendo:
E deveria fazer:
O modal deverá ser setado antes da visualização da janela.
Aproveite e coloque um Sysout após o método setVisible(). Assim quando você executar o dispose() ele deverá mostrar o trace:
Tchauzin!
OK Lina. Muito Obrigado por seu Comentario!
Assim que chegar em casa, irei realizar esse teste.
Vlww...
|
Meu Blog:
http://www.blogdasofertas.com |
|
|
 |
|
|
|
|