Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    19

    Problema Apertura File Pdf Da Programma

    Salve,

    qualche tempo fa ho terminato col mio gruppo un programma che, fra le tante cose, era in grado di aprire i file .pdf con la "documentazione" per il prof (no javadoc eh... ma si era capito) tramite pressione di un pulsante.
    La parte di codice che si occupa di questo è la seguente:

    codice:
    if(ae.getSource() == itemHelp) 
    { InputStream pdf=(ClassLoader.getSystemResourceAsStream("progettobd2011/documentazione/guidaProgettoBD2011.pdf")); 
    //System.out.println(Desktop.isDesktopSupported()); 
    File temp; 
    try 
    { temp = File.createTempFile("man1", ".pdf");
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(temp)); 
    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = pdf.read(buf)) != -1) 
    { 
       out.write(buf, 0, len);
     } 
    Desktop.getDesktop().open(temp);
     pdf.close();
     out.close();
     } 
    catch (IOException ex) { Logger.getLogger(FinestraPrincipale.class.getName()).log(Level.SEVERE, null, ex); 
    }
    Tutto ha funzionato alla grandissima su ogni pc e sistema operativo... fino ad oggi: da poco ho cambiato il mio pc, SO: Win 7 a 64 bit e, come per magia, il suddetto pezzo di programma non da il risultato voluto ma questo simpaticissimo errore:

    codice:
    ott 05, 2011 1:33:46 AM progettobd2011.FinestraPrincipale actionPerformed Grave: null java.io.IOException: Failed to open file:/C:/Windows/TEMP/man11158211959691807431.pdf. Error message: Accesso negato. 
    at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:77)
    at sun.awt.windows.WDesktopPeer.open(WDesktopPeer.java:54) 
    at java.awt.Desktop.open(Desktop.java:272) 
    at progettobd2011.FinestraPrincipale.actionPerformed(FinestraPrincipale.java:319) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376) 
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) 
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877) 
    at java.awt.Component.processMouseEvent(Component.java:6504) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Spero che possiate davvero spiegarmi cosa diavolo sta succedendo, perchè proprio non ne ho idea.

    PS. Se qualcuno pensasse a diritti dell'utente su file o cartella di destinazione del file temporaneo che vado a creare sono tutti impostati correttamente.
    Inoltre se vado nella cartella TEMP del sistema il file temporaneo è creato, ma non si apre neanche con doppio clic (il sistema dice che è corrotto ).

    Grazie in anticipo per ogni dritta.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Io non credo che abbia funzionato... se l'ha fatto è stato per pura fortuna: stai cercando di aprire un file che hai appena "creato" e che non hai ancora chiuso (e che, quindi, potenzialmente non è ancora stato scritto tutto su disco: hai usato BufferedOutputStream, che, appunto, bufferizza prima di scrivere)!

    codice:
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(temp)); 
    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = pdf.read(buf)) != -1) 
    { 
       out.write(buf, 0, len);
     } 
    
    out.flush();   // Non obbligatoria, ma male non fa
    out.close();
    
    Desktop.getDesktop().open(temp);
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    19
    Purtroppo funzionava eccome... e anche se il tuo ragionamento è giustissimo anche con le migliorie che mi hai consigliato il problema persiste tale e quale...

    Solo su questo pc per ora da problemi (chiedendo a gente più esperta di me hanno ipotizzato in un problema tra JVM e Win 7 64 bit anche se non capisco in cosa possa consistere...)

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Bè non vorrei sbagliarmi ma credo che il problema sia proprio "l'accesso negato" a determinati percorsi,almeno in alcuni miei progetti riscontravo lo stesso problema cercando di interagire con determinati file in alcuni percorsi tipo "C:/" o in programmi ecc...per avere riscontro se ciò che dico è una bufala prova ad aprire con il tuo programma un file pdf che si trova sul desktop e vedi un po' quale sarà l'esito (se non mi sbaglio il file sul desktop lo aprirà senza alcun problema)...ciao!


    Ps. ho provato il tuo codice per aprire un pdf sul desktop e lo apre (ho win 7 32 bit)

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da EBLtorla
    (chiedendo a gente più esperta di me hanno ipotizzato in un problema tra JVM e Win 7 64 bit anche se non capisco in cosa possa consistere...)
    No, nessun problema: un'applicazione che ho scritto io e che viene regolarmente installata su ambienti Win 7 a 64 bit, che crea PDF e li apre, non ha alcun problema.

    Piuttosto valuterei le considerazioni di zipangulu: Win 7 ha delle restrizioni molto forti su alcuni percorsi. Io, per non avere di questi problemi, installo l'applicazione nella cartella dell'utente e modifico a mano le impostazioni sulle autorizzazioni per quella cartella, in modo da poter lavorare tranquillamente.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    19
    Allora, mi sono accorto che un passettino in avanti è stato fatto (grazie alle modifiche al codice che mi avete consigliato): ora se vado nella cartella temp i file pdf creati non sono più corrotti, ma nonostante ciò non li apre e da il solito errore...
    Io proprio non ho idea di come fare, i permessi sono tutti settati a modo (sulle cartelle in cui lavora il programma) quindi sono bloccato.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    19
    Per zipangulu: se mi fai vedere il percorso che hai scritto per aprire il file su desktop e fare la tua prova mi fai un favore (io ho scritto il perc assoluto di un pdf messo su desktop ma non lo calcola proprio).
    Grazie intanto.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    io ho fatto:

    codice:
    import java.io.*;
    import java.awt.*;
    import java.util.logging.*;
    class Pdf{
    	public static void main(String [] args) throws Exception{
    		InputStream pdf=new FileInputStream ("C:/Users/mioNome/Desktop/nomeFilePDF.pdf");
    		File temp;
    		try
    		{ temp = File.createTempFile("man1", ".pdf");
    		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(temp));
    		byte[] buf = new byte[1024];
    		int len;
    		while ((len = pdf.read(buf)) != -1)
    		{
    		   out.write(buf, 0, len);
    		 }
    		Desktop.getDesktop().open(temp);
    		 pdf.close();
    		 out.close();
    		 }
    		catch (IOException ex) { Logger.getLogger(null).log(Level.SEVERE, null, ex);
    		}
    	}
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    19
    Purtroppo ancora nulla di fatto... non so più che pesci pigliare.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    19
    Non ci credo!! Disinstallando Acrobat Reader X e installando un pdf viewer random il programma è tornato completamente in funzione...
    Evidentemente qualche parametro di sicurezza di acrobat è rimasto settato (nonostante abbia deselezionato ogni impostazione di sicurezza sui file pdf ).
    Quindi è con estrema soddisfazione che posso dire risolto questo stupido problema.
    Vi ringrazio per la pazienza e l'aiuto comunque, alla prossima!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.