Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-08-2009, 23:04   #1
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
[JAVA] Problema ad aprire un file

Salve a tutti, ho un problema nell'aprite un file richiamato con java (Desktop).

Devo aprire un file .pdf

Vi faccio una mappa sintetica dei package

package1 (File) dentro ha questo
1. File che si chiama manuale.pdf

2. ClasseApriFile{

public static File manuale= new File((InvocaFile.class.getResource("c.pdf").getPath()));

public static void openManuale(){
try {
Desktop.getDesktop().open(manuale);
} catch (IOException ex) {}
}
}//fineclasse


package2
classe che esegue il ClasseApriFile.openManuale();

Succedono queste cose:

(con il progetto salvato nella cartella C:bla bla\ntbeans bla bla\...
1. Avvio l'applicazione e non funziona. Se stampo il path del file mi riporta

C:\Documents%20and%20Settings\nexus\Documenti\NetBeansProjects\Chat\build\classes\File\c.pdf

Negli spazi mi mette il simbolo %


2. Se sposto il progetto in un altro HD, compilo ed eseguo il programma va.

3. Se creo il .jar il file non lo apre. Ma perché?!

Ultima modifica di Nexus 6 : 18-08-2009 alle 22:26.
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 12-08-2009, 11:46   #2
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
up
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2009, 22:26   #3
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
up
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 00:40   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Usa toURI al posto di getPath. Il passaggio URL -> URI -> File dovrebbe gestire la conversione dei caratteri speciali nel percorso del file.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 11:29   #5
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
Non è cambiato niente. Se eseguo il programma dall'IDE funziona, lo apre. Se creo il .jar e lo eseguo non me lo apre.

public static void openManuale() throws URISyntaxException{
File f = new File(InvocaFile.class.getResource("c.pdf").toURI());
try {

Desktop.getDesktop().open(f);

} catch (IOException ex) {
Logger.getLogger(InvocaFile.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("File non trovato");
}
}

Ultima modifica di Nexus 6 : 19-08-2009 alle 17:58.
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 12:21   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
E' cambiato che al posto di

C:\Documents%20and%20Settings\nexus\Documenti\NetBeansProjects\Chat\build\classes\File\c.pdf

Ora avrai

C:\Documents and Settings\nexus\Documenti\NetBeansProjects\Chat\build\classes\File\c.pdf

Nota che quando impacchetti il progetto se manuale.pdf si trova dentro ad un package del progetto (file) manuale.pdf va a finire dentro al jar del programma (a meno che tu non l'abbia escluso personalizzando il task di ant).

Le risorse contenute in un jar sono accessibili tramite getResource ma NON sono file. Siccome Desktop opera sui file prima di poter aprire il manuale con il lettore pdf di sistema devi estrarre il file dal jar - magari in una cartella temporanea - oppure devi distribuire il manuale al di fuori del jar. La prima opzione è più "simpatica" perchè tiene uniti i file del programma.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 18:16   #7
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
E' cambiato che al posto di

C:\Documents%20and%20Settings\nexus\Documenti\NetBeansProjects\Chat\build\classes\File\c.pdf

Ora avrai

C:\Documents and Settings\nexus\Documenti\NetBeansProjects\Chat\build\classes\File\c.pdf
Si, è vero.

Quote:
Nota che quando impacchetti il progetto se manuale.pdf si trova dentro ad un package del progetto (file) manuale.pdf va a finire dentro al jar del programma (a meno che tu non l'abbia escluso personalizzando il task di ant).
E qua ci sono, è dentro il .jar, come lo sono le .gif (dentro il codice, c'è un'istruzione setIcon che non da errore ma non mi mette l'icona che gli dico, non ne mette proprio, svuota il contenitore.

Quote:
Le risorse contenute in un jar sono accessibili tramite getResource ma NON sono file. Siccome Desktop opera sui file prima di poter aprire il manuale con il lettore pdf di sistema devi estrarre il file dal jar - magari in una cartella temporanea -
Cioè, se clicco su apri file lui dovrebbe creare una directory e metterci dentro il pdf che è dentro al .jar? Sono confuso, non capisco perchè deve l'hanno fatto così questa cosa
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 18:39   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se per le icone hai usato ImageIcon e non vedi l'icona allora il percorso che usi per puntare all'immagine non è corretto.

Tieni conto che se il file si trova in:

file/manuale.pdf

allora il suo URL è:

URL url = getClass().getResource("/file/manuale.pdf")

Nota il "/" iniziale.

Se il file è in un jar allora l'url restituito punterà al documento contenuto nel JAR. Che non è un file. Non è un:

file://

Non essendo un file non puoi usarlo con Desktop. Desktop accetta solo File. La soluzione è banalissima: pigli l'URL e trasferisci il contenuto in un file temporeano che poi userai con Desktop.open. A meno che non sia un pdf da mille tonnellate l'utente neppure si accorgerà del trasferimento.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 19:08   #9
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
Sono nel pallone

Qua non ho capito proprio XD





Nell'else che dovrei mettere?




Non fare caso alle altre classi, sono per prova.


Sti maledetti, è questo il modo di fare le cose! sto scherzando
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 23:13   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Tutto ok.

I due percorsi sono:

/File/c.pdf

e

/File/msn.png

E devi prenderli entrambi con getResource:

URL manuale = InvocaFile.class.getResource("/File/c.pdf");

e

URL urlIcona = NewJFrame.class.getResource("/File/msn.png");

L'URL dell'icona puoi usarlo direttamente con ImageIcon:

labelAvatarAmico.setIcon(new ImageIcon(urlIcona));

L'altro URL devi prima passarlo in un file. Ad esempio:

Codice:
package File;

import java.awt.Desktop;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

public class InvocaFile {

    public static void openManuale() throws IOException {
	URL manuale = InvocaFile.class.getResource("/File/c.pdf");
	File temp = File.createTempFile("manuale", ".pdf");
	BufferedInputStream in = new BufferedInputStream(manuale.openStream());
	BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(temp));
	try {
	    for(int i = in.read(); i != -1; i = in.read()) {
		out.write(i);
	    }
	} finally {
	    try { in.close(); } finally { out.close(); }
	}
	Desktop.getDesktop().open(temp);
    }
}
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2009, 16:01   #11
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
Grazie mille! Non so come ringraziarti.

Ho notato una cosa, su Windows 7 64bit non si apre il pdf. Come mai? Mi riporta errore di IOException bla bla... sia in .jar che con l'IDE.
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2009, 16:04   #12
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
l'eccezione completa com'è?
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2009, 16:22   #13
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
Non so perchè fallisce l'apertura.Su XP e Ubuntu va, forse dipende dalla jvm su W7 64bit? Ma tu sei programmatore?

20-ago-2009 16.20.37 Parametri.NewJFrame jMenuItemManualeIstruzioneActionPerformed
GRAVE: null
java.io.IOException: Failed to open file:/C:/Users/Nexus/AppData/Local/Temp/manuale1264765352396561706.pdf. Error message: Errore non specificato.

at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:59)
at sun.awt.windows.WDesktopPeer.open(WDesktopPeer.java:36)
at java.awt.Desktop.open(Desktop.java:254)
at File.InvocaFile.openManuale(InvocaFile.java:42)
at Parametri.NewJFrame.jMenuItemManualeIstruzioneActionPerformed(NewJFrame.java:718)
at Parametri.NewJFrame.access$1500(NewJFrame.java:17)
at Parametri.NewJFrame$16.actionPerformed(NewJFrame.java:680)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2009, 14:37   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non sono programmatore.

Fai un espertimento con JDIC

https://jdic.dev.java.net/

e prova ad aprire lo stesso file (JDIC è il progetto originale da cui è stata prelevata la classe Desktop che però è stata rimaneggiata).

Se funziona con JDIC è un problema di java.awt.Desktop. La soluzione è usare JDIC che è peraltro una libreria molto piccola.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2009, 15:55   #15
Nexus 6
Senior Member
 
Iscritto dal: Sep 2006
Città: Catanzaro
Messaggi: 976
Grazie di tutto, ti farò sapere
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Gli utenti con GPU Intel non possono gio...
Un agente AI visita 5.000 siti dove un u...
IA, virtualizzazione e cyber resilienza:...
AMD aggiorna FSR alla versione 4.1. Migl...
Nuovi suffissi internet 2026: per la sec...
Claudy Day: tre vulnerabilità in ...
Record di efficienza per i pannelli sola...
SteamOS 3.8 è disponibile in ante...
Opel in Formula E dalla Stagione 13: con...
Windows 11 26H1: ecco le scadenze esatte...
Arriva HiSecEngine USG6000G, la nuova ga...
Xiaomi SU7 2026 ufficiale con 902 km di ...
Il tuo vecchio iPhone potrebbe essere gi...
Già disponibile un primo aggiorna...
Accessori auto in sconto su Amazon: aspi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v