Cleto,
eu conheco muito bem o comando Application.ProcessMessages, pois
programei em
Delphi por tres anos.
Sempre usei o comando no final de um loop que executava
um processamento longo, para atualizar um TGauge que
indicava o progresso do processamento.
Em Java, eh um pouco diferente. Uma vez que voce dispara um evento
dentro de um manipular de eventos, se
dentro da rotina do metodo manipulador voce inserir um
loop while onde no final voce insira um componente como
um gauge que indique progresso, nao vai funcionar. O problema tem a
ver com Threads. Se nao me engano, os despachos de eventos ocorrem na
mesma thread onde ocorre a pintura de tela, me parece que o nome eh
AWTThread. Como o gauge tem que ser repintado na mesma Thread onde o
evento gerado esta sendo tratado, o metodo paint() do gauge fica
bloqueado. A solucao eh
voce criar uma nova thread para processar o seu codigo,
e a partir desta thread, invocar a atualizacao do gauge, que ocorrera
em uma outra thread, independente.
Ai funciona, com certeza, pois ja fiz isso.
Se voce usa os componentes SWING, me parece que tem uma classe chamada
Timer que auxilia na atualizacao da interface grafica em
processamentos longos.
Da uma pesquisada.
Um abraco.
ANDRE.
---Cleto Henrique Andrade Silva <[EMAIL PROTECTED]> wrote:
>
> Oi pessoal,
>
> gostaria de saber se existe em java algo equivalente ao m�todo
ProcessMessages da classe TApplication do Delphi. Isto �, alguma forma
de a minha aplica��o continuar trabalhando enquanto estou esperando
que algo aconte�a.
>
> Tenho uma classe em Delphi que � assim (uma descri��o superficial da
classe):
>
>
> // TEditor � um componente gr�fico como por exemplo um frame
>
> TEditor = class(TGraphicControl)
> private
> Clicou: boolean;
> xclique, yclique: double;
> procedure ClicouMouse(x, y: double);
> public
> function DigitalizarPonto: TPonto;
> end;
>
> // Descri��o dos m�todos
>
> // Este m�todo � chamado sempre que ocorrer o evento do clique do
mouse
> // Ent�o, quando o mouse � clicado eu recebo a coordenada onde foi o
clique
> procedure ClicouMouse(x, y: double);
> begin
> xclique := x;
> yclique := y;
// armazena a coordenada onde foi clicado o mouse
> Clicou := true;
> end;
>
> function DigitalizarPonto: TPonto;
> var PontoClique: TPonto;
> begin
> Clicou := false;
> while (not Clicou) do
> Application.ProcessMessages; //
aguarda at� que seja clicado o mouse
> PontoClique := TPonto.Create(xclique, yclique);
> Result := PontoClique;
// retorna o ponto do clique
> end;
>
>
> Obs: O m�todo ProcessMessages permite que a Fila de tarefas do
windows continue a ser processada enquanto eu estou preso no loop,
assim a aplica��o continua a fazer outras coisas inclusive o clique do
mouse.
>
>
> Eu poderia fazer este retorno do ponto clicado como um evento, mas
isto n�o � interessante. O que desejo � prender o fluxo de uma
sequ�ncia de c�digo at� que algo ocorra sem travar a aplica��o.
>
> Algu�m sabe como fazer algo equivalente a isto em java? Aguardo
ancioso!
>
>
> Obrigado!
>
>
>
<HR>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML//EN">
<HTML>
<HEAD>
<META content=text/html;charset=iso-8859-1 http-equiv=Content-Type>
<META content='"MSHTML 4.71.1712.3"' name=GENERATOR>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT color=#000000 face=Arial size=2>Oi pessoal,</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT face=Arial size=2>gostaria de saber se existe em java algo
equivalente ao m�todo ProcessMessages da classe TApplication do Delphi.
Isto �, alguma forma de a minha aplica��o continuar
trabalhando enquanto estou esperando que algo aconte�a.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>�</DIV>
<DIV><FONT face=Arial size=2>Tenho uma classe em Delphi que � assim
(uma
descri��o superficial da classe):</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>�</DIV>
<DIV>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>
<DIV><FONT color=#000000 face=Arial size=2>// TEditor � um componente
gr�fico como por exemplo um frame</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>TEditor =
<STRONG>class</STRONG>(TGraphicControl)���������������
</FONT></DIV>
<DIV><FONT face=Arial size=2><STRONG>private</STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT color=#000000 face=Arial
size=2>��� <FONT color=#000000>Clicou:
boolean;</FONT></FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2><FONT
color=#000000></FONT>��� xclique, yclique:
double;</FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>���
<STRONG>procedure</STRONG> ClicouMouse(x, y: double);</FONT></DIV>
<DIV><FONT face=Arial size=2><STRONG>public</STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT color=#000000 face=Arial
size=2>��� <STRONG>function</STRONG> DigitalizarPonto:
TPonto;</FONT></DIV>
<DIV><FONT color=#000000 face=Arial
size=2><STRONG>end</STRONG>;�������
</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>// Descri��o dos
m�todos</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>// Este m�todo �
chamado sempre que ocorrer o evento do clique do mouse</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT><FONT face=Arial
size=2>//
Ent�o, quando o mouse � clicado eu recebo a coordenada onde foi o
clique</FONT></DIV>
<DIV><FONT face=Arial size=2><STRONG>procedure</STRONG> ClicouMouse(x,
y:
double);</FONT></DIV>
<DIV><FONT face=Arial size=2><STRONG>begin</STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT color=#000000 face=Arial
size=2>��� <FONT color=#000000>xclique := x;</FONT></FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2><FONT
color=#000000></FONT>��� yclique :=
y;���������������������������������������������������������
// armazena a coordenada onde foi clicado o mouse</FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>��� Clicou :=
true;</FONT>�</DIV>
<DIV><FONT face=Arial size=2><STRONG>end</STRONG>;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2><STRONG>function</STRONG>
DigitalizarPonto: TPonto;</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT><FONT face=Arial
size=2>var
PontoClique: TPonto;</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT><FONT face=Arial
size=2><STRONG>begin</STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT color=#000000 face=Arial
size=2>��� Clicou := false;</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2>��� <FONT
color=#000000>while (not Clicou) do</FONT></FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2><FONT
color=#000000></FONT>�������
Application.ProcessMessages;���������������������������
// aguarda at� que seja clicado o mouse</FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>��� PontoClique :=
TPonto.Create(xclique, yclique);</FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>��� Result :=
PontoClique;�������������������������������������������
// retorna o ponto do clique</FONT>�</DIV>
<DIV><FONT face=Arial size=2><STRONG>end</STRONG>;</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>Obs: O m�todo
ProcessMessages
permite que a Fila de tarefas do windows continue a ser processada
enquanto eu
estou preso no loop, assim a aplica��o continua a fazer outras
coisas inclusive o clique do mouse.</FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>��� </FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2>Eu poderia fazer este
retorno do
ponto clicado como um evento, mas isto n�o � interessante. O que
desejo � prender o fluxo de uma sequ�ncia de c�digo
at� que algo ocorra sem travar a
aplica��o.</FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>��� Algu�m sabe
como fazer algo equivalente a isto em java? Aguardo
ancioso!</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2>Obrigado!</FONT></DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV>
<DIV><FONT color=#000000 face=Arial size=2></FONT>�</DIV></BODY></HTML>
_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com
* Para nao receber mais e-mails da lista, acesse
<http://www.sun.com.br:8080/guest/RemoteAvailableLists>, coloque seu e-mail, escolha a
lista <[EMAIL PROTECTED]> e de um <submit>.