PDA

View Full Version : [Java] Runtime


max246
19-07-2007, 09:49
Con la classe Runtime è possibile eseguire un processo non in background?

andbin
19-07-2007, 11:09
Con la classe Runtime è possibile eseguire un processo non in background?Se per "non in background" intendi dire che vuoi attendere esplicitamente la fine del processo avviato, sì, si può fare ma non c'entra Runtime. I metodi exec() ritornano un Process e quest'ultima classe ha il metodo waitFor() che sospende il thread corrente finché il processo lanciato ha terminato la sua esecuzione.

max246
19-07-2007, 15:00
Intedo che se faccio parire un BAT voglio che si avvia visuale e non in background.
:help:

andbin
19-07-2007, 15:36
Intedo che se faccio parire un BAT voglio che si avvia visuale e non in background.
:help:Cioè che abbia la console?

rt.exec (new String[] { "cmd", "/C", "start", "cmd", "/C", "prova.bat" });

71104
19-07-2007, 16:13
Cioè che abbia la console?

rt.exec (new String[] { "cmd", "/C", "start", "cmd", "/C", "prova.bat" }); come mai hai usato start e due cmd anziché un solo cmd? :wtf:

andbin
19-07-2007, 17:17
come mai hai usato start e due cmd anziché un solo cmd? :wtf:Il motivo è abbastanza semplice.

Facciamo una premessa: se avessi usato semplicemente:

rt.exec (new String[] { "cmd", "/C", "prova.bat" });

avrei certamente eseguito il batch prova.bat ma il tutto si sarebbe svolto nel contesto del processo (una istanza di 'cmd.exe') avviato direttamente da Java. In questo modo però avrei dovuto usare e gestire gli stream di input/output del processo, per intenderci, quelli forniti dalla classe Process (getOutputStream(), ecc...).

Invece facendo come ho detto nel post precedente, avvio ancora una istanza di cmd.exe ma non mi frega niente dei suoi standard input/output in quanto uso il comando interno start per eseguire una nuova istanza di cmd.exe in cui interpretare il batch. In questo modo si ha il risultato di avere sempre una console nuova di "zecca" per eseguire il batch. Sia che la applicazione Java abbia o non abbia una sua console.

71104
19-07-2007, 18:15
ah vabbè, ho capito: è per aprire un'altra console :p

max246
20-07-2007, 08:26
Non va :(
Cioè si apre una finestra nera e subito scompare.

71104
20-07-2007, 16:21
prova ad usare l'opzione /K anziché /C nel secondo cmd

71104
20-07-2007, 16:21
cioè così:
rt.exec (new String[] { "cmd", "/C", "start", "cmd", "/K", "prova.bat" });