Newsgroup: it.comp.java
Titolo: Eseguire da un programma java un .jar. Come fare?

Salve a tutti, e' la prima volta che scrivo su questo gruppo e spero
possiate aiutarmi a risolvere un grosso problema.
Ho fatto un programma java e dal suo interno devo eseguire un file .jar
disposto in un altra cartella. Cio' che ho fatto e' stato:
Runtime rt=Runtime.getRuntime();
Process proc=rt.exec("myFile.jar");
ma il risultato è stato:
Exception in thread "main" java.io.IOException: CreateProcess:
C:\Documenti\Appl
icazioni java\prove\myFile.jar error=193
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
        at java.lang.Runtime.exec(Runtime.java:591)
        at java.lang.Runtime.exec(Runtime.java:429)
        at java.lang.Runtime.exec(Runtime.java:326)
        at Container.main(Container.java:28)
Press any key to continue...
Allora ho provato a passare un file .bat che facesse da intermediario,
in pratica io chiamavo il .bat ed il .bat chiamava il .jar
Il tutto ha funzionato, ma in maniera anomala. Il .jar doveva produrre
una stampa a schermo, cosa che non ha fatto. Cioe' il .bat e'
partito(lo so con certezza matematica) ma nn ho visto l'output. Il .bat
e' perfetto, tant'e' che se lo lancio con doppioclick funziona e mostra
la stampa del .jar, ma se lo lancia in sw .class mi perdo l'output.
Dove sbaglio?

 
innanzitutto a legare cosě tanto il programma a un s.o. particolare

 Process proc=rt.exec("myFile.jar");
Prova a rispondere a questa domanda: come si esegue da una shell un
programma java che sta in un jar?
Ciao
Matteo

matish ha scritto:

Ciao Matteo,
innanzi tutto grazie per la risposta, ma il problema resta. Se ansiche'
fare come scritto sopra uso:
Process proc=rt.exec("java -jar
C:\\Documenti\\Applicazioni_java\\prove\\myFile.jar");
il risultato e':
"Press any key to continue..." (ha funzionato ma non ha mostrato
l'output, cioe' la stampa a schermo)
il fatto e' che usando il sistema  Process proc=rt.exec("myFile.jar");
simulo il doppioclick, mentre nel secondo modo simulo il lancio da
shell.
Il problema non e' lanciarlo, ma e' mostrare l'output.
Ascolta se in un programma java usi un'istruzione su un oggetto (ogg)
che ritorna un int, cioe' se usi "ogg.istruzione();", anche se il suo
output e' l'int nessuno lo vede( tranne la VM) a meno che non si usi
"System.out.print(ogg.istruzione());".
Secondo me accade una cosa del genere.
Come risolvo?
Idem se chiamo, ansiche' direttamente il .jar, il .bat che chiama a sua
volta il jar ho:
"Press any key to continue..."(funziona ma nn si vede)
se invece nel .bat tolgo la chiamata al .jar e chiamo il notepad di win
tutto funziona(il notepad si apre e si vede)
Il .jar è fatto bene, tant'e' che con il classico doppio click stampa
"jar eseguito con successo"
Ma perche! :-(

 innanzitutto a legare così tanto il programma a un s.o. particolare
Diciamo che l'applicazione, per ora deve girare sotto win e sul mio pc,
poi mi dedichero' ad ottimizzarla per altre piattaforme e/o per
strutture di directory diverse.
Il problema è rendere funzionante cio' che nn funziona, poi i
"merletti". in pratica uso un approccio "botton-up".
Cmq grazie per l'ottimo consiglio.
Ciao