2012-01-06 16 views
5

Sto cercando di caricare un file di immagine binario per eseguire alcune elaborazioni all'interno del mio codice Java lato server. Attualmente sto mettendo la mia immagine nella confezione in cui è presente la mia classe di esecuzione e chiamando:Come posso leggere un file di risorse in un file di guerra inesploso distribuito in Tomcat?

Image img = Image.getInstance(this.getClass().getResource("logo.png")); 

Questo funziona bene quando sono in esecuzione Tomcat sulla mia casella di sviluppo in una configurazione di guerra esplosa, ma quando schiero a un server eseguendo Tomcat dove non esplode i file war, la chiamata a getResource restituisce null.

Ho anche provato a spostare l'immagine al mio contesto radice e accedendo in questo modo:

Image img = Image.getInstance(this.getClass().getResource("/../../logo.png")); 

Ancora una volta, questo funziona sulla mia casella di sviluppo, ma non quando ho distribuire altrove.

C'è un modo migliore per accedere a questo file? Che cosa sto facendo di sbagliato?

Grazie !!

+0

probabilmente dovrebbe avere anche detto che io sono usando Maven per costruire la mia app web. Ho una risposta completa che risolve il mio problema, ma non posso postarlo per 8 ore sulla mia stessa domanda. – 11101101b

+0

Metti risorse nella tua directory "src/main/resources". Quindi accedervi con: this.getClass(). GetResource ("/ logo.png"); oppure: Thread.currentThread(). GetContextClassLoader(). GetResource ("logo.png"); – 11101101b

risposta

5

Se si sta costruendo con Maven, ti consigliamo di verificare che le immagini in realtà viene collocato nell'archivio.

Inserire le risorse nella directory src/main/resources. Poi accedere ad esse con:

this.getClass().getResource("/logo.png"); 

o:

Thread.currentThread().getContextClassLoader().getResource("logo.png"); 

(Esempi di codice da commento di cui sopra, ma mettere in risposta ad essere più visibile)

+0

Si prega di non dimenticare il '/' prima del nome del file nel primo caso –

1

Si potrebbe mettere le vostre immagini alla radice del classpath e provare questo:

Thread.currentThread().getContextClassLoader() 
       .getResource("logo.png"); 
+1

+1 - Per root del classpath, "WEB-INF/classes" nel file WAR è dove molti inseriranno la/e risorsa/e. Sebbene possano organizzarsi usando cartelle come "images/logo.png" all'interno di esse. – rfeak

Problemi correlati