Newsgroup: it.comp.java
Titolo: E' corretto?(getRuntime()) ...

Runtime.getRuntime().exec("
http://www.repubblica.it
");
Voglio semplicemente far aprire una pagina Web sul Browser di Default,
ma mi da errore... cosa sbaglio?Devo dargli qualche altro parametro?

 ha scritto nel messaggio
news:aqqm7g$5q6i$1...@stargate1.inet.it...


 ha scritto nel messaggio
news:aqqq7o$ku2$1...@pluto.sm.dsi.unimi.it...


 Runtime.getRuntime().exec("start 
http://www.repubblica.it
");
"che è meglio" (in quanto IE potrebbe non essere stato installato nella
directory di default)

 
NO! Non funziona...
il messaggio di errore č il seguente...
"CreateProcess: start 
http://www.repubblica.it
 error=2"
Help Me!
Tanks'!


RISOLTO!
Runtime.getRuntime().exec("file.bat");
All'interno ci scrivo "start 
http://www.repubblica.it
".
TUTTO OK!, anche se gradirei sapere come fare per lanciarlo direttamente 
senza usare il file BAT.
Ciaoooo!!!!

Mettiamo un po' di chiarezza. Dato che Java deve essere multipiattaforma, i geni della Sun hanno ridotto all'osso le API per gestire
processi esterni alla JVM. Quello che abbiamo in mano quindi sono le varie implementazioni del metodo Runtime::exec(...) e la classe
Process.
L'azione eseguita da exec() č solo quella di avviare un processo, che viene caricato dal sistema operativo ospite dal file
eseguibile specificato come parametro. Cosa vuol dire ciň? Molto semplice: il percorso passato in exec deve essere un file
eseguibile presente in locale (o su un filesystem direttamente raggiungibile). "http://" non č uno specificatore di file, quindi il
sistema operativo si rifiuta di avviarlo, cosě come "start http://". Specificando invece "file.bat", l'avvio avviene correttamente
perchč il S.O. (in questo caso Windows) trova il file e accetta la richiesta.
Un dubbio a questo punto potrebbe sorgere sul fatto che digitando "http://...ecc..." su Start->Esegui , Window apre la pagina
corrispondente. Questo perchč l'azione di "apertura risorsa" č interpretata dalla Shell del sistema operativo (che č un'applicazione
come qualunque altra) che a sua volta decide di avviare iexplorer.exe, passandogli come argomento l'url specificato. Come fa la
shell a capire che deve lanciare iexplorer.exe? Dal registro di Windows (oggetto a cui la JVM non ha accesso - ed č meglio cosě
credetemi). Tutto ciň fa parte di un sistema operativo in particolare, e alla JVM non glie ne puň "frega' dde meno".
Per poter aprire una pagina web (specificandone sono l'url) da un programma in Java, una soluzione potrebbe essere la seguente:
- creare un file di configurazione in cui inserire il percorso assoluto dell'eseguibile del browser (magari chiedendo una mano
all'utente stesso, proponendogli di indicare il percorso del file eseguibile del browser preferito)
- al momento č necessario visualizzare la pagina, č sufficiente eseguire:
    Process browser=Runtime.getRuntime().exec(browserExecPath + " " + pageUrl);
- quando la pagina non deve essere piů visualizzata si puň usare (anche se mi sembra un po' brutale):
    browser.destroy();
o se preferite attendere finchč l'utente (o uno script sulla pagina) non chiuda il browser stesso:
    browser.waitFor();
Ricordatevi solo che con Process::waitFor() il thread chiamante rimane bloccato finchč il processo riferito non termina.
Lo svantaggio di questa soluzione č di dover chiedere all'utente finale dove si trova il browser. L'innegabile vantaggio č che a
questo punto possiamo slegarci dal sistema operativo, perchč ci interessa solo il PERCORSO dell'eseguibile, e non il suo formato. Il
citato file di configurazione potrebbe avere quindi questo aspetto:
Sotto Windows:
C:\Programmi\Internet Explorer\IEXPLORE.EXE
Sotto Linux:
/usr/bin/netscape
Un'alternativa potrebbe essere quella di utilizzare qualche genere di libreria Java che possa visualizzare un "minibrowser"
all'interno di un JFrame... Non ci ho ancora messo mano, ma sono sicuro che esiste un oggetto del genere (JBuilder lo usa per
visualizzare l'help...). In questo caso č possibile ottenere un controllo completo sulla pagina.
Spero di essere stato utile.
--
"Lascia che gli eventi seguano la propria strada"
(per rispondere personalmente leva IlDitoDalCulo.)

 
GRAZIE!
Tutto chiaro!
Avevo già pensato alle soluzioni che hai proposto, ma mi risultavano un 
pò scomode per l'utente, penso che in ambiente windows un .bat mi vada 
benissimo.
Ciao e grazie della spiegazione!
Cià! Cià!

 accesso - ed č meglio cosě credetemi).
...per la precisione "start.exe" e' un programma standard di windows
che cerca nel registry l'applicativo che gestisce il suo parametro e
l'avvia:
start prova.pdf          ---esegue--> acroread.exe prova.pdf
start 
http://mio.sito.it
 ---esegue--> iexplore.exe 
http://mio.sito.it
-- 
__/\__ * this mail has been written by Talpa Stellare
\ TS / * che da piccolo una volta e' morto.
 |/\|  * icq# 78630739 - togli i caratteri maiuscoli x e-mail

  |/\|  * icq# 78630739 - togli i caratteri maiuscoli x e-mail
start.exe esiste solo su Windows 95/98/Me, è stato soppesso su Windows NT4/2000/XP. In
questi ultimi cmq, se invocato da un batch o da un prompt dei comandi (cmd.exe) funziona
ancora, ma solo perchè cmd.exe lo interpreta come un comando interno, e non come file.


 start.exe esiste solo su Windows 95/98/Me, è stato soppesso su Windows NT4/2000/XP. In
Ah, ok, ero rimasto arretrato! ;-))))
Buono a sapersi...
