2010-09-15 7 views
29

Ho cercato un metodo per incorporare una risorsa in un progetto java (utilizzando Eclipse v3.6.0) quindi utilizzare quella risorsa incorporata all'interno di un controllo (ad es., JLabel). Ho visto metodi di referenziamento delle risorse dal file system. Una volta che il progetto è stato sviluppato, vorrei pubblicare l'applicazione come eseguibile. Va notato che questi eseguibili verranno distribuiti/lanciati su piattaforme Windows, * NIX e Linux.Incorporare risorse (immagini, bit audio, ecc.) In un progetto Java quindi utilizzare tali risorse

So che questo può essere fatto nel mondo di Visual Studio, ma sono molto sconosciuto come farlo in Java/Eclipse IDE. Come una domanda a parte, come faccio a ottenere Eclipse per creare il progetto come un eseguibile in modo che possa essere lanciato?

Qualsiasi aiuto è molto apprezzato.

Mark

UPDATE 1:

Sulla base BalusC's response, ho voluto condividere il codice che ho per risolvere il mio problema. Le mie lezioni sono sotto il pacchetto "Viking.Test" e quindi ho inserito il file immagine sotto il pacchetto "Viking.Test.Resources". Tutto ciò è fatto all'interno di Eclipse per importare l'immagine nel progetto.

  1. ho importato l'immagine facendo clic destro sul Progetto -> Importa -> Generale/Sistema file per l'origine di importazione.
  2. selezionata la cartella che conteneva l'immagine di importare
  3. Selected "Project/src/Viking/Test/Resources" per il 'nella cartella' parametro
  4. non ha cambiato le opzioni e cliccato "finito"

Nel file di origine ho aggiunto il seguente codice per inserire l'immagine in un JLabel (LblLogo)

try 
{ 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    InputStream input = classLoader.getResourceAsStream(
    "Viking/Test/Resources/MyImage.jpg"); 
    Image logo = ImageIO.read(input); 
    LblLogo = new JLabel(new ImageIcon(logo)); 
    LblLogo.setBounds(20, 11, 210, 93); 
    getContentPane().add(LblLogo); 
} 
catch (IOException e) { } 

risposta

17

Inserire semplicemente tali risorse nella struttura source/package e utilizzare ClassLoader#getResource() o getResourceAsStream() per ottenerle come URL o InputStream dal classpath dal percorso completo del pacchetto qualificato.

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream input = classLoader.getResourceAsStream("/image.gif"); 
// ... 

O se è nello stesso pacchetto della classe corrente, è possibile anche ottenere come segue:

InputStream input = getClass().getResourceAsStream("image.gif"); 

Come una domanda lato, come faccio ad ottenere Eclipse per creare il progetto come un eseguibile in modo che possa essere lanciato.

Rightclick Progetto Java> Esporta> Runnable file JAR.

+0

Grazie BalusC, ha funzionato. L'unica cosa strana è il progetto Java del clic destro -> Esporta -> Il file JAR eseguibile funziona su una macchina, ma non sull'altra.La macchina su cui non funziona può eseguire il comando "java -jar MyJarFile.jar" e verrà eseguito. Durante l'esportazione, se seleziono "Pacchetto librerie richieste in JAR generato" ricevo il messaggio di errore "Impossibile trovare la classe principale. Il programma uscirà". Ho bisogno di capire perché e io non lo capisco affatto. – lordhog

+0

Alcune cose sono cambiate da Eclipse 3.5. Quale versione è in esecuzione presso le macchine? La cosa più semplice è eseguirla una volta usando Ctrl + F11 in modo che venga salvata come ultima configurazione * Esegui come * che puoi selezionare durante l'esportazione. – BalusC

+0

Ok, a casa stavo usando Java v6 Update 21 e Java v6 Update 20 su quello che non funzionava. Non vedo perché ciò possa causare problemi, ma ho disinstallato Java e reinstallato Java. Dopo aver reinstallato Java, sono riuscito a fare doppio clic e il file jar è stato eseguito. Freddo. Non sono sicuro di quale fosse il problema. Ora l'altra preoccupazione è che anche quando chiudo la finestra un'istanza di "javaw.exe" è ancora in esecuzione. Ragazzo, devo abituarmi a questa cosa di Java. Grazie per tutto l'aiuto BalusC! – lordhog

Problemi correlati