PDA

View Full Version : [JAVA] Distribuire eseguibile jar contenente un eseguibile binario per Windows (exe)


VegetaSSJ5
17-08-2011, 18:44
Salve a tutti,
ho la necessità di includere in un programmino scritto in java, e distribuito sotto forma di un unico file jar eseguibile, un file binario eseguibile per Windows, ovvero un .exe. Quindi durante l'esecuzione del jar devo poter disporre del file exe per eseguirlo. Uso NetBeans come ambiente di sviluppo. E' possibile fare ciò? Se si, come posso poi accedere al file eseguibile dal codice java?

Grazie!

Mixmar
18-08-2011, 09:09
Scusa la risposta forse fuori luogo, ma non sarebbe più conveniente il contrario, ossia includere il jar all'interno dell'eseguibile exe, in modo che il secondo esegua il primo, e non viceversa?

Comunque, posso capire che per problemi dell'architettura dell'applicazione questo non sia pratico: potresti creare un "bundle" che comprende il tuo jar e l'exe nello stesso file autoscompattante, che non fa nient'altro che mettere jar ed exe nella stessa directory: a questo punto, riferendoti alla directory del file jar, recuperi il riferimento al file .exe da dentro il codice Java e lo esegui.

Sembra contorto, ma il fatto è che la soluzione non è elegantissima di per sè, anzi è un po' ingarbugliata secondo me... :boh:

VegetaSSJ5
18-08-2011, 11:43
sì ovviamente avevo pensato alla creazione di un bundle, come semplice archivio zippato... :D
però mi piacerebbe creare proprio un'applicazione stand alone in un file unico che viene eseguito e contiene tutto il necessario.
per quanto riguarda l'ipotesi di includere il jar nell'exe non posso farlo visto che l'exe è un programmino secondario che non ho scritto io e di cui la mia applicazione fa uso...

Mixmar
19-08-2011, 09:16
sì ovviamente avevo pensato alla creazione di un bundle, come semplice archivio zippato... :D
però mi piacerebbe creare proprio un'applicazione stand alone in un file unico che viene eseguito e contiene tutto il necessario.
per quanto riguarda l'ipotesi di includere il jar nell'exe non posso farlo visto che l'exe è un programmino secondario che non ho scritto io e di cui la mia applicazione fa uso...

La vedo dura allora :D Naturalmente è possibile includere il file "exe" all'interno del jar (alla fine, è un archivio zip), ma non è possibile eseguirlo semplicemente caricandolo in memoria e dicendo a Windows di lanciarlo. L'unica soluzione è scompattarlo da qualche parte (directory temporanea?) ed usare Runtime.exec().

Mi sono convinto di questo fatto pensando alle zone di memoria: se anche tu caricassi il contenuto dell'eseguibile "exe" nella memoria della JVM (premesso che non è il modo corretto di procedere), cosa potrebbe fare il SO visto che quella memoria è riservata a Java? :D Non può certo eseguirci dentro un altro programma.