Newsgroup: it.comp.java
Titolo: problema exec

Ciao,
ho creato una piccola gui in cui, tra le altre cose, ho messo un bottone 
che serve per lanciare un'applicazione java, ecco la parte di codice 
incriminata:
	private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
		try {
			Runtime rt = java.lang.Runtime.getRuntime();
			try {
				Process p = rt.exec("C:\\Documents and 
Settings\\blabla\\Desktop\\tightvnc_ViewerJava\\src\\java VncViewer.class 
HOST blablabla PORT 5900");
				p.waitFor();
			}
			catch (InterruptedException io){
				System.out.println("IE Exception: " + io);
			}
		}
		catch (IOException e){
			System.out.println("IO Exception: " + e);
		}
	}
Il problema č che mi restituisce un "error=2" che non ho la piů pallida 
idea di cosa voglia dire! Ho provato a far partire un'applicazione 
qualsiasi, come un player multimediale o lo stesso newsreader che uso, ad 
esempio, e funziona correttamente. Sapreste darmi una mano?
Ciao a tutti!

 darmi una mano? 
error=2 e' il codice di ritorno dell'api win32 CreateProcess() quando per 
qualche motivo non riesce a far partire l'eseguibile. Di solito il problema 
e' che cerchi di far partire qualcosa che non e' un eseguibile: per esempio 
"dir" o "cd" etc (che sono interpretati dall shell e non sono comandi di 
per se'). Nel tuo caso (una volta controllato che il path a java.exe sia 
proprio quello) visto che hai argomenti, usa la versione di exec() che 
accetta comando ed argomenti.
-- 
Fighting for peace is like fucking for virginity
ObjectZone - 
http://space.tin.it/computer/csadun

 esempio, e funziona correttamente. Sapreste darmi una mano?
Credo, non voglio dire stronzate, che il problema sia un problema di path.
Tu hai detto di eseguire il comando "java" che si trova in "C:/Documents and
Settings/blabla/Desktop/tightvnc_ViewerJava/src/" che, presumo, sia la
directory doive si trova la tua classe.
Scusa la mia domanda, ma essendo un programma in java... perch[ non lo
chiami direttamente dall'interno della tua Virtual Machine... male che vada
anche utilizzando il main statico se non vuoi fare una cosa piu' bellina
inizializzando la classe direttamente.
[esempio stupido: VncViewer.main(new String[] {"HOST", "239.bla.bla.bla",
"PORT", "11111"});]
Eviteresti di far aprire al sistema operativo un nuovo processo e lanciare
una nuova Virtual Machine *e evitando lo spreco di risorse che poi fanno i
black out... hehehehe(
    Regards,
        Kazuma
--
I've got nothing against God. It's his fan club I can't stand.
Alex "Kazuma" Garbagnati, 
http://www.kazuma.net
EJB & Tomcat jGuru FAQ Manager, 
http://www.jGuru.com
Tutor "Progetto Scuole", 
http://www.JIA.it
Java Italian Association - SUN - MIUR

 accetta comando ed argomenti.
non credo sia un problema di path, ho impostato la variabile di sistema
Path affinchè possa eseguire i vari java.exe, javac.exe....... ovunque.
Proverò con il tuo suggerimento ;-)
Grazie!

 "PORT", "11111"});]
il fatto è che che successivamente mi servirà un modo per cambiare host e
porta, ad esempio leggendoli da un file, quindi mi sa che il tuo
suggerimento è da scartare ;-)
 
Grazie!

 incriminata:
Aggiornamento:
try {
			Runtime rt = java.lang.Runtime.getRuntime();
			String[] cmd = new String[4];
			cmd[0] = "C:\\Documents and 
Settings\\blabla\\Desktop\\tightvnc_ViewerJava\\src\\";
			cmd[1] = "java.exe";
			cmd[2] = " HOST blablabla";
			cmd[3] = "PORT 5900";
			try {
				Process p = rt.exec(cmd);
				p.waitFor();
			}
Adesso mi dà error=3!!! Cavolo, che vuol dire?
PS: dove posso trovare documentazione sugli errori?
Grazie ;-)

 suggerimento è da scartare ;-)
Beh, non e' detto. L'applicazione, e tutti gli elementi che la compongono,
sono degli oggetti, no? A meno che il VncViewer sia una applicazione scritta
in modo che puo' essere usata solo tramite GUI, dovreti poter usare
l'applicazione come un normalissimo oggetto. Bloccare/attivare gli stream,
cambiare porta ed host...
Non capisco cosa implichi di cosi' strano, il leggere i dati da file... Li
leggi e inizializzi la classe (o richiami il main passando i parametri)
utilizzando quello che hai letto...
Fai una prova.. se non va allora ammetto le mie colpe (non farmi camminare
in ginocchio sui ceci... )
VncViewer.main(new String[] {"HOST", "239.113.bla.bla","PORT", "11111"});
e dimmi se funge... (ovvio, VncViewer deve essere nel classpath)
Poi leggi da un file tutto quello che vuoi e metti, ad esempio in un
String[][] e fai un ciclo che ti chiama VncViewer:
Strnig[][] infos = <leggi da file... puoi anche usare oggetti... o mappe o
quel che vuoi>;
for (int i=0; i<infos.length; i++) {
    VncViewer.main(infos[i]);
}
Per me funge... hehehe
Se poi hai la documentazione (javadoc) di VncViewer, per me si pu; anche
fare di meglio....
    regards,


On Mon, 30 Jun 2003 13:12:43 GMT, Kazuma wrote:
[cuttone]
grazie a tutti per l'aiuto, per il momento ho risolto ;-)
a presto per nuovi dubbi :-D

 wrote in
news:1tmqbgqy5hadm$.1o14czfu5nhnv$.
d...@40tude.net
: 

Dicevo perche' il tuo codice specifica
"C:\\Documents and 
Settings\\blabla\\Desktop\\tightvnc_ViewerJava\\src\\java"
come programma da eseguire.
Peraltro ho appena notato che gli dai come parametre "VncViewer.class" che  
- ammenoche' tu non stia usando una JVM strana - non ha senso (il nome 
della classe da far girare non e' il nome del file che la contiene).


 PS: dove posso trovare documentazione sugli errori?
Per esempio, 
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dllproc/base/createprocess.asp
