View Full Version : Java --> Jar
Vorrei comprimere una applicazione Java e farla autoeseguibile: mi pare che ciò si possa fare utilizzando jar... ma come
Sono riuscito a comprimere tutto ma non riesco a far funzionare l'autoeseguibile.
Come si fa grazie
P.S ho un JTextPane associato ad un JScroolPane : come devo fare affichè quello che scrivo sul JTextPane sia sempre visibile? (lo scroll funziona ma alla rovescia!!)
devi specificare un manifest file (semplicemente un file di testo) con dentro:
Main-Class: <nome-classe-che-contiene-il-main>
e poi si fa (se non ricordo male)
jar -cvfm <nome-manifest_file> <nome-file-jar> <file-da-compattare>
Originally posted by "soalle"
devi specificare un manifest file (semplicemente un file di testo) con dentro:
Main-Class: <nome-classe-che-contiene-il-main>
e poi si fa (se non ricordo male)
jar -cvfm <nome-manifest_file> <nome-file-jar> <file-da-compattare>
Ok! adesso ci provo e ti faccio sapere!
grazie comunque
ho creato un Manifest.mf:
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-Class: Client
ho compattato tutto con jar inserendo il manifest e tutto funziona
ma quando vado a cliccare il file Client.jar ho il seguente errore:
Could not find the main class. Program will exit!
cosa devo fare!!
lo stesso accade se specifico Client.class nel Manifest.mf
no devi specificare il nome della classe senza l'estensione .class...
Per caso la classe con il main è dentro ad un package?
Nel caso in cui sia dentro ad un package devi inserire il nome della classe completo stile java, cioé:
<nome_package>.Client
Fammi sapere
Originally posted by "soalle"
no devi specificare il nome della classe senza l'estensione .class...
Per caso la classe con il main è dentro ad un package?
Nel caso in cui sia dentro ad un package devi inserire il nome della classe completo stile java, cioé:
<nome_package>.Client
Fammi sapere
adesso ci provo!!
il main fa parte di un package ed in particolare jchat.client.Client.class
quindi ho definito il file Manifest come:
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-Class: jchat.client.Client
e ho chiamato il comando jar nel seguente modo
C:\jchat>jar -cvfm client\Client.jar client\Manifest.mf client\*.class client\immagini\*.* client\immagini\icone\*.*
tutto funziona senza errori ma quando clicco su Client.jar si verifica lo stesso errore visto precedentemente
Originally posted by "carMAN"
il main fa parte di un package ed in particolare jchat.client.Client.class
quindi ho definito il file Manifest come:
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-Class: jchat.client.Client
e ho chiamato il comando jar nel seguente modo
C:\jchat>jar -cvfm client\Client.jar client\Manifest.mf client\*.class client\immagini\*.* client\immagini\icone\*.*
tutto funziona senza errori ma quando clicco su Client.jar si verifica lo stesso errore visto precedentemente
Se lanci da c.\jchat il main-class del manifest deve essere : client.Client
ok adesso ci provo e domani ti faccio sapere
ho provato a modificare il file manifest in client.Client ma l'errore permane. Inoltre ho lanciato il comando jar da c:\ modificando il manifest in jchat.client.Client ma nulla è cambiato .
Cosa devo fare!!!
Grazie comunque
Prova ad usare il jar da c: e in concomitanza a ciò usare il manifest con:
jchat.client.Client
Può darsi che dica una cosa che già hai fatto ma scrivo lo stesso perchè è un piccola "bizzarria" in cui mi sono imbattuto.
Il file di testo che contiene il manifest deve necessariamente terminare con un "ritorno a capo" altrimenti la jvm restituisce proprio un'eccezione "Could not find the main class".
Ad esempio:
[inizio]
Main-Class: package.classname
[fine]
è "errato", mentre
[inizio]
Main-Class: package.classname
[fine]
funziona correttamente.
Ciao.
ti ringrazio vivamente per il consiglio!!
adesso ci provo e ti farò sapere!!!
non so cosa fare!!
lancio il comando jar in questo modo
C:\j2sdk1.4.1_01\bin>jar cvfm c:\jchat\client\Client.jar c:\jchat\client\Manifes
t.mf c:\jchat\client\*.class c:\jchat\client\immagini\*.* c:\jchat\immagini\icon
e\*.*
e tutto funziona.
il file Manifest è il seguente
Main-Class: jchat.client.Client [invio]
[invio]
cosa devo fare?
P.S la cartella jchat si trova in C
Carman, hai un pvt (se non hai già risolto).
Cascasse il modo adesso quel programma lo facciamo diventare un executable jar file! :D
Ciao.
Originally posted by "PGI"
Carman, hai un pvt (se non hai già risolto).
Cascasse il modo adesso quel programma lo facciamo diventare un executable jar file! :D
Ciao.
non purtroppo no!!
ti riassumo un pò la situazione
il progetto riguarda una chat basata su client e server progettata in multitread e con i socket.
E' il progetto per un esame universitario.
Nella cartella jchat, che si trova in c, c'è la cartella client e quella server.
Innazitutto dedichiamoci al client.
Nella cartella client ci sono i file .class, . java ed una cartella immagini e , al suo interno, una cartella icone.
Il file Manifest.mf si trova in jchat\client cioè dove stanno i .class e .java.
Il comando jar che eseguo è esattamente quello che ho scritto precedentemente e viene eseguito correttamente. Purtroppo, però, quando clicco sul file Client.jar la JVM mi segnale l'errore già descritto.
Aiutami e te ne sarò grato!!
prova un po' così:
nel prompt dei comandi vai in c:\ e scrivi
jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/
che succede?
ho definito il file manifest cosi:
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-Class: jchat.client.Client
[invio]
e dal prompt:
C:\j2sdk1.4.1_01\bin>jar mcf c:\jchat\client\Manifest.mf c:\jchat\client\PROVA.jar c:\jchat\client\*.*
tutto funziona ma l'errore permane
Per il manifest è sufficiente la sola scritta "Main-Class: ...[invio]", comunque quello che hai scritto non fa una grinza.
Dovresti comunque provare a scrivere esattamente la riga a cui accennavo:
"jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/ "
con il prompt dei comandi su "c:\";
Lo dico perchè ho provato poco fa a fare un archivio jar con "c:\nomepackage\..." anzichè "nomepackage/" e mi dava un errore "could not find main class".
Io sto qui finchè non funziona, :D
Ciao.
se scrivo c:\jar ... il comando non viene trovato!
se invece scrivo
C:\j2sdk1.4.1_01\bin>jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/
ho il seguente risultato
jchat : impossibile trovare il file o la directory
ho copiato il file jar in c e ho scritto
C:\>jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/
Can't determine application home
infine ho copiato il file jar in jchat e ho scritto
C:\jchat>jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/
jchat : impossibile trovare il file o la directory
quindi veramente non so cosa fare
Non c'è problema!
Allora, anzichè infilarci nel setting delle variabili d'ambiente del sistema operativo facciamo così:
apri il prompt dei comandi, vai in c:\ e scrivi
set path=C:\j2sdk1.4.1_01\bin\ [invio]
poi vai col comando
jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/ [invio]
cosa succede?
ti premetto che ho XP professional
nel prompt ho scritto:
C:\>set path=C:\j2sdk1.4.1_01\bin\
C:\>
tutto ok, quindi
C:\>jar mcf c:\jchat\client\Manifest.mf PROVA.jar jchat/
Can't determine application home
C:\>
ho provato a scrivere jar
C:\>jar
Can't determine application home
C:\>
ed ecco il risultato
PS: ho scritto un semplice helloword ponendolo in c
quindi, sempre in c, ho scritto il metafile
Main-Class: helloword
e infine:
C:\j2sdk1.4.1_01\bin>jar mcf c:\Manifest.mf c:\PROVA.jar c:\helloword.class
C:\j2sdk1.4.1_01\bin>
e l'errore persiste anche in questa semplice prova
Prendiamola da un altra parte :)
Modifichiamo la variabile path per includere jar.exe nei programmi di default (l'ho fatto anch'io nel mio s.o., vai tranquillo).
apri
start->pannello di controllo->sistema, scheda "avanzate", bottone "variabili d'ambiente", evidenzia la variabile "path" (non pathext) e clicca su "modifica"; nella casella di testo trovi qualcosa di simile a
"%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Programmi\ATI Technologies\ATI Control Panel"
in fondo aggiungi un punto e virgola (se manca) e scrivi il percorso in cui si trova jar.exe, alla fine avrai una cosa così (posto la variabile path del mio sistema):
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Programmi\ATI Technologies\ATI Control Panel;C:\Program Files\s1studio_jdk\j2sdk1.4.1\bin;
premi ok e riavvia il sistema.
Una volta riavviato apri il prompt dei comandi, vai in c:\ e digita "jar", a questo punto parte l'elenco dei comandi disponibili per il programma jar.
tutto ok?
scusa per il ritardo con cui ti rispondo ma non sono stato in sede.
Comunque quello che mi hai detto di fare era già stato fatto in passato.
Tutte le istruzioni (java, javaw, serialver..etc) funzionano se le chiamo da c: o da altrove; purtroppo,il comando jar invece non parte e mi da un errore :cry:
Pardon per le informazioni superflue :)
Allora sposterei tutta la cartella "jchat" e il file manifest.mf in "c:\j2sdk1.4.1_01\bin" in modo da avere una cartella
c:\j2sdk1.4.1_01\bin\jchat\...
e un file
c:\j2sdk1.4.1_01\bin\Manifest.mf
e da "c:\j2sdk1.4.1_01\bin" lancerei
jar mcf Manifest.mf prova.jar jchat/
Scusa per il ritardo ma sono stato fuori sede e sono tornato oggi.
Domani farò quello che hai detto e ti farò sapere
grazie
FUNZIONA!!!!!!!!!!!!!!!....quasi!!!
il file prova.jar, una volta cliccato, viene eseguito ma non vengono caricate le immagini!!
Nella cartella jchat\client si trova la cartella immagini dove ci sono le immagini utilizzate nell'applicazione.Esse non vengono caricate ( al loro posto,nell'interfaccia grafica, non c'è nulla)
Il caricamento delle immagini è così definito:
[nella Gui]
....
private final byte preseconnesse=0,presesconnesse=1,duecomputer=2,....
.....
private final Image[] immagine =new Image[14];....
....
private MediaTracker tracker;
...
[nel costruttore della Gui:]
........
tracker=new MediaTracker(this);
........
Toolkit toolkit=Toolkit.getDefaultToolkit();
..........
String path="immagini/";
String pathicone="icone/";
immagine[preseconnesse]=(toolkit.getImag(path+"preseconnesse.gif"));
tracker.addImage(immagine[preseconnesse],preseconnesse);
immagine[presesconnesse]=(toolkit.getImage(path+"presesconnesse.gif"));
tracker.addImage(immagine[presesconnesse],presesconnesse);
.....
.....
System.out.println("Attendere: caricamento immagini in corso...");
try{
tracker.waitForAll();
}catch(InterruptedException e){}
System.out.println("caricamento avvenuto!");
........
perchè le immagini non vengono caricate!!
P.S:nel file Prova.jar esse sono presenti!!!
Quando carichi qualcosa dentro ad un jar la procedura è leggermente diversa...
ImageIcon worldIcon =
new ImageIcon( cl.getResource( "vamp/tutorial/images/world2.gif" ) );
dove cl è il classloader...
Originally posted by "soalle"
Quando carichi qualcosa dentro ad un jar la procedura è leggermente diversa...
ImageIcon worldIcon =
new ImageIcon( cl.getResource( "vamp/tutorial/images/world2.gif" ) );
dove cl è il classloader...
scusa cosa è un classloader??
e come si costruisce!!!
Il class loader è il componente che si occupa di caricare le classi ;) la classe di ClassLoader è l'oggetto wrapper a tale componente.
E' possibile recuperare il ClassLoader tramite una classe...
Se ad esempio nella tua applicazione esiste la classe Client allora:
ClassLoader cl=Client.class.getClassLoader();
Ho eseguito le modifiche e tutto funziona!
Purtroppo però, dopo aver creato il file jar e dopo averlo clikkato esso non parte e non mi viene restituito alcun errore!!!
cosa devo fare!!!!
Ma hai dei problemi a livello di jar (cosa che ipotizzo) o di programma?
Prova a fare un po' di debug per vedere se riusce ad entrare da nel main (cioé se il jar viene effettivamente eseguito...)
l'applicazione funziona correttamente se fatta partire in modo normale (java ..... oppure Ctrl3 in TextPad) e l'esecuzione del comando jar avviene perfettamente senza errori. Il problema si verifica quando clicco sul file .jar restituitomi dal comando jar.Quando clicco tale file l'applicazione non parte!! boh
Ti dicevo prova a mettere una stampa su console nel main, tipo:
System.out.println("Funziona!!!");
e poi fai partire il jar da una console dos per vedere se riesce a trovare il main... altrimenti ti darà errore...
per fare fare partite il file jchat.jar da console ho scritto:
C:\j2sdk1.4.1_01\bin>javaw jchat.jar
(jchat.jar si trova in questa cartella)
e mi viene segnalato il seguente errore:
Could not find the main class. Programm will exit!
lo stesso avviene se faccio partire, sempre da Console, il file prova.jar .
Questo file,se cliccato, funziona ma senza immagini (è il primo file jar costruito senza il classLoader)
passo... non saprei dirti... con i jar non ho mai avuto un ottimo rapporto...
Hai provato da console java -jar <nomefile.jar>.... ma non penso cambi molto...
Originally posted by "soalle"
passo... non saprei dirti... con i jar non ho mai avuto un ottimo rapporto...
Hai provato da console java -jar <nomefile.jar>.... ma non penso cambi molto...
ok ti ringrazio molto lo stesso!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.