Newsgroup: it.comp.java
Titolo: jar all'interno di jar

Salve a tutti,
probabilmente la mia è una domanda stupida, comunque..
..ho fatto una piccola applicazione con interfaccia grafica. Ora vorrei 
fare in modo di poter cambiare il look&feel di Swing con uno più 
accattivante che ho all'interno di un jar esterno.
La mia domanda è : se includo il jar esterno all'interno del mio jar 
eseguibile (quello dell'applicazione) come faccio a rifermi a quello 
incluso??
Per settare il look&Feel dovrei usare queste righe di codice:
.....
    UIManager.setLookAndFeel("napkin.NapkinLookAndFeel");
.....
dove napkin.NapkinLookAndFeel è il nome del jar che ho incluso.
Solo che non funziona... :(
Grazie x l'aiuto

 incluso??
Non conosco il caso specifico dei look&feel di Swing, perň se č analogo 
all'inclusione di un jar nel classpath... non si puň.
Andrea

 
:(
se non posso includere un jar all'interno di un altro jar, come posso 
fare allora?
Io uso Eclipse, ma se importo il jar esterno nel progetto (tramite menu 
Progetto->Proprietà->Java Build Path->Add External Jar), quando poi creo 
il jar "eseguibile", i percorsi sono assoluti e quindi funziona solo 
sulla mia macchina..
Dovrei fare in modo di rendere i percorsi relativi, magari settando 
qualche variabile d'ambiente... ma non so come si faccia...
Puoi darmi una mano? :)
Grazie

 sulla mia macchina..
Che intendi con jar eseguibile? Come lo crei?
In ogni caso penso che basti cambiare i path dentro il jar.
Andrea

 
intendo un jar che contiene un manifest.
Lo creo da Eclipse esportando il tutto in un jar, appunto, eseguibile :)


E lui ti genera automaticamente il class-path nel manifest? Io non sono 
riuscito a farglielo fare. Ma utilizzi qualche plugin?
Andrea

 fare allora?
Puoi sempre scompattare il jar incluso, cosi funziona.
ciao

 Puoi sempre scompattare il jar incluso, cosi funziona.
Come? :)

 
No non uso nessun plugin.
Devi semplicemente selezionare il tuo progetto, poi dal menu 
FILE->EXPORT selezioni JAR FILE.
Lě ti viene chiesto cosa vuoi esportare del tuo progetto.
Invece che cliccare su FINISH, clicca su NEXT fino a quando non ti viene 
chiesto che classe del tuo progetto vuoi usare come Main Class 
(chiaramente devi sceglierne una che contenga un Main).
A quel punto puoi cliccare su FINISH ed otterrai il tuo jar eseguibile :)
Jacopo

 incluso??
Ciao,
forse mi sfugge qualche cosa, ma perchč non tieni la libreria con il l&f 
esterna e la referenzi dal manifest del tuo jar eseguibile?
Vuoi distribuire un file solo?
Se cosě non č puoi appoggiarti al meccanismo delle "Download Extensions"
http://java.sun.com/j2se/1.5.0/docs/guide/extensions/spec.html#bundled
Marco
-- 
reply: remove duh.spam.
http://cthulhu.zapto.org

 
Grazie!!!!
ti ringrazio moltissimo, finalmente sono riuscito a risolvere il problema :)
Era proprio quello che cercavo.
Posso chiederti un altro favore?
Mi servirebbe fare la stessa cosa non piů con un jar ma con un file..
Praticamente la mia applicazione usa uno stylesheet xslt per convertire 
un xml in una pagina html.
Solo che non so come riferirmi a questo file dall'applicazione se questa 
gira su una macchina diversa dalla mia..
Forse dovrei includere questo file in un jar e poi "estrarre" il file al 
momento del bisogno?
Ancora grazie,
Jacopo

 momento del bisogno?
Mah, una possibilità è caricare l'xml e l'xsl tramite classloader; cosi 
facendo puoi inserire i files direttamente nel jar della tua 
applicazione. Questo approccio funziona anche da filesystem, senza 
metterli nel jar, cosi puoi sviluppare e distribuire senza dover 
cambiare niente. Una cosa del genere...
<CODE>
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL stylesheetUrl = loader.getResource("article.xsl");
URL dataUrl = loader.getResource("article.xml");
StreamSource stylesource = new StreamSource(stylesheetUrl.openStream());
StreamSource datasource = new StreamSource(dataUrl.openStream());
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(stylesource);
StreamResult result = new StreamResult(System.out);
transformer.transform(datasource, result);
</CODE>


 A quel punto puoi cliccare su FINISH ed otterrai il tuo jar eseguibile :)
Avevo già provato questa cosa, ma ho fatto ulteriori prove. In nessuna 
di quelle che ho fatto nel manifest viene inserito il class-path. Sei 
sicuro che a te lo inserisca?

Usa due file jar separati, uno per l'applicazione e uno per il look and
feel. Nel manifesto dell'applicazione inserisci nella sezione del
classpath il nome del jar (che sarà nella stessa directory del jar
dell'applicazione:
Class-Path: skinlf.jar
A questo punto tutto funziona... :-)
-- 
Pietro	- 
http://www.pietroweb.tk
Linux Registered User #304991
Powered by MDK Linux Kernel 2.6.3