Newsgroup: it.comp.java
Titolo: Problema creazione .jar

Salve ragazzi,
ho fatto per l'universita' un piccolo progetto e ora avevo
la necessità di creare un file .jar per darlo ad un pò di amici...
Essendo io abbastanza inesperto ho cercato un pò in rete e ho
provato...ho usato la procedura guidata di Eclipse, ho creato il
Manifest, ecc....
Ora però ho qualche problema con la lettura di altri file...
Il mio programmino infatti, tra le altre cose, carica delle immagini e
scrive su dei file di testo....
Ho provato a fare così:
ho inserito anche i filenecessari nel .jar così com'erano nel progetto e
poi per accedere alle immagini ho dato:
this.getClass().getClassLoader().getResource("nomecartella/nomefile")
così come ho letto sul web...Fin qui tutto ok,non mi da alcun problema,
ma se applico la stessa procedura per il file di testo che devo
leggere/scrivere all'interno del mio programma non va, non riesce a
trovare il file e mi lancia l'eccezione di FileNotFound...perchè??come
posso risolvere??grazie a tutti per ogni risposta,
ciao

anzichè stare li a crearti il jar perchè non riversi una copia dei
sorgenti in un file zip?
tanto se poi i tuoi amici sanno utilizzare java possono avviare
l'applicazione dai file class
Se invece insisti sul jar perchè è una questione di principio, creati
un progetto chiudi eclipse, e nella cartella dei sorgenti del progetto
copia e incolla i tuoi.
quando riapri il progetto con eclipse teoricamente dovrebbe trovare i
file e renderli parte del progetto.poi da li viaggi con la
compilazione e i vari metodi per far creare il jar
Con NetBeans funziona la cosa e lo uso da un botto di tempo con
soddisfazione (sono un grande amico di Sun,,, ) e per creare un jar
basta la pressione di un pulsante...
Ciao Marco

scusa non avevo letto la seconda parte del messaggio....
generalmente quando crei il jar lui considera come directory di
default quella del jar (o almeno con netBeans fa così, poi in eclipse
non credo che la solfa cambi...)
il mio consiglio è quello di caricare i percorsi da file .properties
in cui specifichi il percorso in modo relativo
poi prova i percorsi spostado il jar ed i file di proprietà in un
altra cartella in questo modo capisci da quale path parti, oppure
ancora + semplice ma molto + seccante ogni volta che muovi il
pacchetto inserisci nel file properties il percorso assoluto dei
file..
Ciao
Marco

Sun_Seiya ha scritto:

Ehm...innanzituttto grazie...non ho capito molto bene il tuo consiglio 
cmq cerco di chiarirmi meglio...Innanzitutto ho 'bisogno' di questo file 
.jar proprio perchè i miei amici non se ne intendono molto e per loro 
sarebbe più comodo..poi i file di cui ho bisogno nel mio programmino 
sono tutti all'interno del .jar...e uso quella procedura per accedere 
alle immagini e funziona...se  uso però la stessa procedura per accedere 
ai file di testo che devo acquisire e poi scrivere (con le classi 
FileReader/FileWriter e Scanner) non funziona un nisba...non trova i 
file...Spero ora sia più chiaro il mio problema..
Ciao

Scusate se mi intrometto...ma anche io ho lo stesso problema.
Mi spiego:
ho un progetto creato con netbeans. Nella directory del prgetto ho
chiaramente le seguenti cartelle 
- src
- build
- ...
- resources contenente dei file.dat (file di serializzazione)
- immagini contenete le immagini del progetto
ho creato il file .jar ma quando avvio l'applicazione da desktop o ms-dos
sia le immagini che i file serializzati non vengono trovati.
Sono alle rime armi e non sono riuscita a capire come posso fare ad
agganciare le immagini e i file serializzati.
Grazie in anticipo per l'aiuto!!!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
io, quando devo utilizzare un jar, solitamente faccio una classe a cui 
chiedo di instanziare gli oggetti, che richiedo tramite un metodo 
statico tipo:
public static Icon getIcon(String iconDir, String name, String size) {
 
 
	return new ImageIcon(ClassLoader.getSystemResource(
					iconDir + size + name));
}
dove iconDir "it/icons/" ed il package it è dentro src (che poi Eclipse 
crea la copia anche in bin)
per quanto riguarda la lettura/scrittura credo ci siano dei problemi in 
quanto scrivere all'interno di un file zip non è il massimo, soprattutto 
se poi il jar è firmato, credo che sorgano dei problemi di sicurezza.
Tipicamente i problemi che si incontrano con il jar dipendono dal fatto 
che far partire il progetto dal FS normale è una cosa mentre da jar è 
un'altra.
sv.

 sv.
ti ringrazio molto. Scusa la mia ignoranza...ma non riesco a capire come
posso fare nel mio caso.
L'applicazione si avvia ma non riesco a capire dove posso mettere i file i
 modo che c si possa accedere. L'applicazione è uno scarico di magazzino.
Chiaramente se faccio partire il tutto da netbeans non ho problemi.
luisa


 sv.
Problema risolto...mi è bastato copiare i file nella cartella in cui si
trova il file.jar.
Ancora grazieeee


 
no, aspetta, forse ho capito male, ma credo che così in realtà hai solo 
aggirato l'ostacolo.
Tutti i file in sola lettura dell'applicazione (tipo icone, immagini 
ecc) *devono* essere dentro il jar (in modo da trasportarli assieme al 
programma), mentre i file di configurazione in scrittura non credo che 
possano starci nel jar e quindi te li scrive nel normale FS.
Per quanto riguarda invece i file su cui lavora il programma (= non di 
configurazione) si dovrebbe avere la possibilità di scegliere da dove 
prenderli.
ES:
creo un programma che mi converte i filmati da mpeg ad avi.
Nel jar ci vanno i .class e tutti i file di icone/img ecc
Fuori dal jar nulla.
lanciato il jar potrò scegliere in quale directory lavorare con i file 
video.
sv.

sv ha scritto:

Per quanto riguarda il mio problema il file .jar non è firmato e mi 
occorre solo per rendere il mio programma eseguibile...Il mio programma 
è un piccolo gioco che ho sviluppato all'università e i file che ho 
necessità di leggere e scrivere sono dei banalissimi file di testo che 
contengono la classifica del gioco che viene aggiornata ad ogni 
partita.Quindi come posso risolvere?Non è proprio possibile scrivere un 
file all'interno di un .jar???Che alternative ho?Grazie
ff

 sv.
Grazie ancora per la risposta...forse ho aggirato l'ostacolo..sai sono
solo due mesi che sono alle prese con java.
allora ho fatto così:
Con netbeans ho creato il progetto e il file.jar che comprende tutte le
classi(il file jar me lo crea direttamente netbeans cliccando sulla
funzione build). Il mio progetto (gestione di un videonoleggio) contiene
una cartella immagini(con tutte le immagini cd e dvd) che carico nella
cartella del progetto da FS e una cartella resources(che contiene i file
serializzati).
Allora io ho copiato nella cartella dist sia la cartella resources che la
cartella immagini.
Ho creato un 
coll.to
 sul desktop al file.jar e lanciandolo vedo:
- tutto l'archivio che avevo precedentemente caricato con netbeans con
tanto di foto 
- chiaramente caricando in archivio un nuovo cd o dvd (con associata
immagine che carico da FS) è tutto perfetto..almeno mi sembra. Ho fatto
diverse prove e funziona tutto...
ciao


 ff
non credo che puoi scrivere all'interno di un file .jar in quanto, anche 
se non è firmato, rimane un file zip; quindi hai le seguenti alternative:
1) nella tua applicazione fai in modo da estrarre in una cartella 
temporanea il contenuto del .jar, modifichi i file che vuoi e poi lo 
ricrei, ottenendo così 2 .jar (uno dell'applicazione ed uno aggiornato)
2) semplicemente scrivi i tuoi dati in un file .xml (utilizzando i 
properties di java) e dall'applicazione chiedi dove andare a cercare 
tale file. Se invece non esiste (prima partita) lo crea l'applicazione 
ex novo.

 
siccome anche il contenuto delle cartelle resources ed immagini cambia 
(in quanto aggiungi o modifichi dei file) mi pare piů logico che tali 
cartelle siano esterne al .jar e dall'applicazione richiedi la loro 
posizione.
una prova la puoi fare spostando *solo* il .jar da una cartella in 
un'altra e vedere se parte ugualmente.
http://java.sun.com/docs/books/tutorial/deployment/jar/index.html
sv.

 
Questa soluzione mi sembra migliore per le mie necessità ma non ho idea 
di come fare...e poi facendo così non è possibile ricreare il .jar con 
lo stesso nome così da  sovrascrivere il vecchio?


 
infatti, inoltre questo è un procedimento molto rozzo e poco sicuro in 
quanto è alla base di tutti i virus.
basta trattarlo come un normale file .zip:
a) creare una directory
b) estrarre il contenuto del jar in tale directory
c) comprimere il tutto in un nuovo .jar
d) spostare il .jar dove si vuole e cancellare la directory
ovviamente finché l'istanza del programma è in esecuzione non credo ti 
lasci sostituire il .jar
http://java.sun.com/docs/books/tutorial/deployment/jar/
sv.

sv ha scritto:

Beh ma se non riesco a sostituire il .jar non ci guadagno nulla..A 
questo punto devo per forza creare dei file esterni,ho anche provato con 
i Properties il problema è che questi file non dovrebbero essere 
modificabili...Qualche consiglio?

 modificabili...Qualche consiglio?
la rappresentazione dei properties va in xml e logicamente deve essere 
modificabile, altrimenti non serve a nulla,. Il problema è che non puoi 
modificare autonomamente dall'interno il .jar. Quello che mi viene 
adesso in mente è di creare dal programma java il jar e vedere se 
invocando uno script esterno (con RunExec() di System mi pare), magari 
con un ritardo in esecuzione, riesci ad uscire dalla VM e liberare il 
.jar vecchio.
Oppure ti crei uno script che lancia il .jar e poi si aspetta di trovare 
il nuovo nella stessa posizione con un nuovo nome tipo:
java -jar miojar.jar
rm miojar.jar
mv newjar.jar miojar.jar
ammetto che non è elegante come soluzione, ma dovrebbe funzionare.
sv.