PDA

View Full Version : [JAVA] Chiudere Acrobat Reader


som
13-05-2008, 09:30
Salve a tutti.

con queste righe di codice creo un report in pdf :


JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRTableModelDataSource((DefaultTableModel)Tabella.getModel()));
JasperExportManager.exportReportToPdfFile(jasperPrint, reportDest);
if (MostraPdf == 1) {
try {
Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + reportDest);
p.waitFor();
System.out.println("Done.");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "!!!!!!");
}
}


Ho un problema quando l'Acrobat Reader è già aperto con il file in questione.
L'ambiente IDE mi dice giustamente che il file è già utilizzato da un altro processo e mi segnala l'errore alla riga

JasperExportManager.exportReportToPdfFile(jasperPrint, reportDest);


Si riesce a chiudere il file aperto nell'Acrobat Reader con una Runtime? Qualcuno ha qualche buon consiglio da darmi? :D

Grazie a tutti in ogni caso

lovaz
13-05-2008, 11:01
Io avvertirei l'utente, in modo che possa chiudere il file in questione,
non e' bello vedersi chiudere un programma da parte di un'altro

banryu79
13-05-2008, 11:04
Ma non dice che il file aperto in Acrobat è lo stesso generato da quello del report?

Immagino che quello che voglia fare lui, sia di chiudere il file aperto e riaprirlo per visualizzare la versione più aggiornata.

feboss
13-05-2008, 11:16
se esegui quel processo in un thread puoi invocare i metodi interrupt() o destroy()
http://java.sun.com/j2se/1.3/docs/api/java/lang/Thread.html#interrupt()

som
13-05-2008, 11:20
sì il file sarebbe lo stesso, ma la versione aggiornata.

Se non lo chiudo non mi viene aggiornato.

Stavo pensando che potrei farmi una lista dei processi attivi e poi "ammazzare" Acrobat Reader ( magari prima avviso :D )

Per windows posso usare una Runtime al task manager, per Unix al comando ps e per il Mac? vabbè ora cerco.. intanto vi ringrazio!


EDIT: mentre scrivevo ha risposto anche feboss:
Feboss se distruggo un thread con quel codice all'interno sei sicuro che mi chiude anche l'Acrobat Reader?

lovaz
13-05-2008, 11:23
E se l'utente ha aperto piu' documenti? se killi gli chiudi tutto.

Io avviserei, tipo una finestrella
"Impossibile creare il file ... gia' in uso da parte del programma ..."
e qui bisognerebbe trovare il programma che ha aperto il file
es. con lsof

som
13-05-2008, 11:31
Già lovaz hai ragione, abbandono la mia furia omicida :doh: