2012-01-10 18 views
6

Ho una funzione:Java - Speciali URL personaggi

public static ImageIcon GetIconImageFromResource(String path){ 
    URL url = ARMMain.class.getResource(path); 
return new ImageIcon(url); 
} 

Funziona benissimo, ma se metto il mio file JAR su, ad esempio C: \ Ares !!! \ myfile.jar fallisce e non vedo le mie icone. Ho notato che il mio URL è il file :/C:/Ares !!!/myfile.jar! /com/test/images/img.png. Quindi, dopo l'estensione JAR, c'è lo ! Simbolo! Penso che questa sia la ragione principale! Cosa posso fare per evitare questo problema? Grazie.

+0

È necessario utilizzare percorsi relativi anziché percorsi assoluti statici. –

+0

Se non è difficile per te potresti spiegarmi come? Ho la funzione standard ** ARMMain.class.getResource (percorso) ** che restituisce l'URL. – Nolesh

+2

Invece di usare 'C:/XYZ/...' usa il percorso relativo come 'images/img.png'. –

risposta

5

Questo è apparentemente un problema (più di un bug) di Java. L'URL JAR utilizza come delimitatore lo !/, ma non lo sfugge quando appare all'interno del percorso del file.

Puoi provare a scappare da solo, trasformare Ares!!!/ in Ares!!%21/, ma mantenere myfile.jar!/ così com'è.


Secondo RFC3986, ! è una riservata char sub-delimitatore. Pertanto è sicuro utilizzarlo per separare parti diverse in un URL; quando appare all'interno di una parte, deve essere salvato come %21

Tuttavia, il codice Java relativo all'URL JAR apparentemente segue la RFC2396 precedente, in cui ! era un carattere non prenotato. Non era saggio per Java scegliere un char non riservato come separatore. E quando lo ha fatto, dovrebbe almeno fuggire internamente come se il carattere fosse riservato.

+0

Come posso vedere È un grosso problema per tutti gli utenti e programmatori ... Quindi grazie a tutti per la discussione. Ho intenzione di chiudere questo thread. – Nolesh

Problemi correlati