Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-08-2009, 22: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 21:26.
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 12-08-2009, 10: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, 21: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 18-08-2009, 23: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, 10: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 16:58.
Nexus 6 è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2009, 11: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, 17: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, 17: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, 18: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, 22: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, 15: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, 15: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, 15: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, 13: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, 14: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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
La Luna ha un nuovo cratere di grandi di...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
Recensione HUAWEI FreeBuds Neo, piccoli ...
TSMC aumenta i costi di produzione: AMD ...
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: 19:25.


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