Aplicação congela até aparecer o relatório

11 respostas
E

Galera, estou fazendo testes com o JasperReport e tenho a seguinte questão:

A aplicação fica praticamente “congelada” até o relatório aparecer.
O relatório tem apenas um HELLO WORLD.

Como faço pra resolver isso?

11 Respostas

afdestro

thread

ateubh

já pensou em thread? :!:

E

Usando thread não consegui.
Tenho outra parte da aplicação que imprimi etiquetas… e enquanto não imprimi todas as etiquetas, o sistema fica “congelado”.

Criei uma classe que extende Thread… e dentro do FOR… tem sleep(1000);

Tá faltando alguma coisa???

ramilani12

Depende de como vc implementou a thread …

brlima

isso.

cria uma thread separada para chamar o report.

new Thread(){
    public void run(){
        // call report
    }
}.start();
paulorb.pacheco

Me parece que vc nem iniciou a Thread.

A classe que extende a Thread deve ser passada assim:

Thread t1 = new Thread(this);
t1.start();

Isso vc pode rodar na mesma classe que extende a Thread.

E

Tenho meu FRAME com um botão…

Tenho minha classe Imprime que extende Thread…

…

…

…

public void Imprimir(int copias)

for (int i =1; i &lt copias, i++) {

…

…

sleep(1000);

}

Aí quando clico no botão, chamo a classe Imprime e o método Imprimir().
Meu FRAME fica congelado até terminar de imprimir

afdestro

pq vc manda “durmir” um segundo?

brlima

Vou presupor o caminho que vc está seguindo:

  1. Clicar no botão - voce deve ter implementado um ActionPerformed no botão e chama o método doImprimir();

  2. O método doImprimir() vai instanciar a classe Imprime. A classe Imprime, por sua vez, extends Thread e implementar o método void run() e dentro dele vc chama o método imprimir();

  3. Voce inicia a thread chamando o método start() da classe Imprime() que vc acabou de instanciar.

class Imprime extends Thread{
   @override
   void run(){
      imprimir();
   }

   void imprimir(){
      /// call report
   }
}

class Tela extends JFrame{
   ...
   public void doImprimir(){
      Imprime i = new Imprime();
       i.start();
   }
   ...
}
ramilani12

Qndo vc herda da Thread vc precisa implementar o método :

public void run()
{
 this.Imprimir(numCopias);
 yield();
}


public void Imprimir(int copias)
for (int i =1; i &lt copias, i++) {
...
...
sleep(1000);
}
cassio

Eric Yuji:
Tenho meu FRAME com um botão…

Tenho minha classe Imprime que extende Thread…

…

…

…

public void Imprimir(int copias)

for (int i =1; i &lt copias, i++) {

…

…

sleep(1000);

}

Aí quando clico no botão, chamo a classe Imprime e o método Imprimir().
Meu FRAME fica congelado até terminar de imprimir


Se vc não starta a thread (que na verdade é, pelo menos, uma SEGUNDA thread no seu programa) e ainda manda a thread principal dormir 1 segundo, vai ficar tudo ainda MAIS LENTO!

Criado 21 de dezembro de 2006
Ultima resposta 21 de dez. de 2006
Respostas 11
Participantes 7