2012-06-14 30 views
5

Il mio programma è in esecuzione su Ubuntu 10.04, ed ecco il codice:Java Runtime exec getta Nessun file o permesso negato

Process process=Runtime.getRuntime().exec("ls",null,null); 

è un'eccezione di:

Cannot run program "ls": java.io.IOException: error=2, No such file or directory, 

e ho provato per cambiare "ls" in "chmod", "pwd", non ho trovato nessun comando di shell, tutto è venuto allo stesso problema. (Ho anche provato "/ bin/sh -c ls")

e poi i cambia il codice in:

Process process=Runtime.getRuntime().exec("/bin/ls",null,null); 

è un'eccezione di:

Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied 

ho cambiato privilegio di tutti i file e le directory a 777 connessi in modo che io davvero non so cosa c'è di sbagliato con esso.

Grazie per le risposte.

risposta

2
Process process=Runtime.getRuntime().exec("ls",null,null); 

Questo dovrebbe dare un'eccezione No such file or directory dal ls è molto probabilmente non nella directory di lavoro corrente del programma. Quando si digita ls dal prompt della shell Linux, viene utilizzata la variabile di ambiente PATH per trasformare ls in /bin/ls. Runtime non fa questo per te.

È necessario specificare il percorso completo "/bin/ls". Come @Ernest menzionato, dovresti usare il metodo Runtime.exec("/bin/ls") e non passare gli argomenti nulli.

Process process=Runtime.getRuntime().exec("/bin/ls"); 

vostre osservazioni sembrano indicare che, anche quando si utilizza questa chiamata, si stanno ottenendo un'eccezione Permission denied. Questo funziona per me da un eseguibile standard di Java. Suppongo che tu possa fare un /bin/ls dalla riga di comando di Linux con successo? /bin/ls (e le directory associate) dovrebbero essere 755 e non 777 che sarebbe un incubo per la sicurezza. Ma 777 dovrebbe funzionare.

Forse stai eseguendo una sorta di JDK protetto? Ad esempio, le applet non dispongono delle autorizzazioni per eseguire comandi Unix per motivi di sicurezza. Forse hai un Java policy file restrittivo e devi aggiungere le autorizzazioni execute?

+0

Grazie per la risposta, trovo che il compilatore build-in del mio eclisse non è standard sun-jdk, è jdk aperto, ora uso la formica nel compilatore il mio programma con sun-jdk-javac, va tutto bene, grazie mille. – libing

Problemi correlati