agora o seguinte, tenho alguns dados para mostrar no relatório, então eu exporto para PDF e abro o arquivo, só que o java faz tão rápido que não dá tempo de exportar todos os dados para o pdf, daí quando o java abre o pdf ele abre incompleto, então eu fecho o pdf e abro direto no arquivo e abre o pdf completo, gostaria então de fazer com que após a exportação do arquivo o java esperasse 1 ou 2 segundos no máximo para concluir a exportação . . .
Só está bem estranho isso, tão rápido que não dá tempo de popular. Bom, não tenho como analisar a fundo agora o seu código, mas tu pode dar um Thread.sleep(3000) para aguardar os três segundos de processamento. Só digo, se o processo de preenchimento levar 4 segundos, como fica ? Supondo que venham muitos dados ou qualquer outro motivo que ocasione o atraso.
Dá uma revisada no seu código com calma, porque eu usei isso em Servlet e após a exportação já mandava imprimir em tela e nunca tive esse problema.
Timer ou espera não é a solução para o seu problema…
Parece que tem algo ficando em memória… falta algum flush… não sei… faço isso que você fez direto em desktop e web e nunca tive problemas…
Timer ou espera não é a solução para o seu problema…
Parece que tem algo ficando em memória… falta algum flush… não sei… faço isso que você fez direto em desktop e web e nunca tive problemas…
Qual versão do jasper esta usando?
[/quote]
Eu também sinto cheiro de algo errado, só estou sem tempo de analisar o código dele. E claro, só estamos vendo essa classe, não sabemos de todo o resto.
Independente de utilizar Thread.sleep, Timer ou qualquer outra função que pause por um X tempo o processamento, acredito que essa não seja a solução adequada para seu problema.
Procure o erro no seu código, em algum momento você deve estar utilizando a API de forma errada.
A solução de pausar o processamento pode trazer mais problemas no futuro…
Cara Usar o Therd.sleep ou qualquer outro recurso para pausar o processo por w tempo não é recomendado o ideal seria você criar o seu thread ou criar usar o AsyncTask que e bastante simples e resolve o seu problema de uma forma bem pratica um exemplo
public class ShopServices extends AsyncTask<Integer, Double, String>
@Override
protected void onPreExecute() {
// aqui vc define a ação que deve ocorre antes que a tread seja iniciada no meu caso mostra um cx de dialogo para esperar
showDialog = ProgressDialog.show(context, context.getResources()
.getString(R.string.DialogDownloadTitle), context
.getResources().getString(R.string.DialogDownloadText), true,
true);
}
@Override
protected String doInBackground(Integer... params) {
// Aqui vc coloca o seu codigo com ação que vc quer executar no mesu caso estou o download das info que tenho um DB
dao = new ShoppenDAO(context);
final String DOWNLOAD_LIST = "ListShoppen" + System.currentTimeMillis()
+ ".txt";
File sdCardPath = Environment.getExternalStorageDirectory();
File directory = new File(sdCardPath.getAbsolutePath() + "/ShoppenList");
directory.mkdirs();
try {
File file = new File(directory, DOWNLOAD_LIST);
FileOutputStream output = new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(output);
for (Shoppens lojas : dao.getLista()) {
writer.write(lojas.toString() + "\n");
}
writer.close();
output.close();
dao.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// e quai e colocada o que deve ser executado apois o termino da execução do thread no meu caso eu to fechando a cx de dialogo e enciando um
// notificação para o usuario caso esteha ativado,
// No seja no seu caso qui vc manda abrir o o pdf pois vai estar garantido que ele so vai abrir depois que tiver sido completamente escrito
if (MainActivity.getNotef().equals("true")) {
MainActivity.setNotification();
}
showDialog.dismiss();
}
ps isso esta rodando em uma classe separada que e chamada na minha classe principal da seguinte no button que eu quero que execute o download
ShopServices downloadBg = new ShopServices(this);
downloadBg.execute();