Chamar mplayer passando caminho_da_pasta/* [Resolvido]

9 respostas
M

Estou com um problema ao chamar o mplayer pelo java, o java não reconhece o *.

Se eu executo direto no terminal do linux o comando executa normalmente, mas pelo java não executa.

String[] aleatorio = new String[]{"mplayer","-noborder","-shuffle","-loop 0","-quiet","-slave","-nosound","/home/marcos/videos/*"};
Runtime.getRuntime().exec(aleatorio);

Se eu retirar o * e colocar o nome de um arquivo no lugar funciona normalmente.

Alguma sugestão?

Obrigado.

9 Respostas

nel

Oi,

se colocares a extensão do arquivo não resolve?
Algo como ‘.wav’ por exemplo ou tentar '.*’.

M

Mesma coisa!

O que acho estranho é que pelo terminal funciona normalmente esse comando.

Será que o java não aceita o caracter *?

nel

MHZ:
Mesma coisa!

O que acho estranho é que pelo terminal funciona normalmente esse comando.

Será que o java não aceita o caracter *?

Então, quando se busca todos os arquivos de um diretório você simplesmente passa o diretório e não /.
Talvez você deva agir da mesma forma, tira o '
’ ao fim e veja o resultado.

M

nel:
MHZ:
Mesma coisa!

O que acho estranho é que pelo terminal funciona normalmente esse comando.

Será que o java não aceita o caracter *?

Então, quando se busca todos os arquivos de um diretório você simplesmente passa o diretório e não /.
Talvez você deva agir da mesma forma, tira o '
’ ao fim e veja o resultado.

Se eu retiro o * o mplayer não encontra os arquivos mesmo executando pelo terminal do linux.

O comando executado é esse: mplayer -noborder -shuffle -loop 0 -nosound -quiet -slave /home/marcos/Desktop/Aleatorios/* -wid 77594670

Muito estranho não funcionar!

Obrigado pela ajuda.

M

Acho que encontrei o problema, só não sei como resolver! :smiley:

Verifiquei a saída do processo:

laying /home/marcos/Desktop/Aleatorios/*.

O problema acho que é o “.” após o *, e não tenho a mínima ideia de como retirar esse ponto.

nel

MHZ:
Acho que encontrei o problema, só não sei como resolver! :smiley:

Verifiquei a saída do processo:

laying /home/marcos/Desktop/Aleatorios/*.

O problema acho que é o “.” após o *, e não tenho a mínima ideia de como retirar esse ponto.

Sinceramente, nunca trabalhei com essa classe e portanto não sei como você deve proceder e se realmente esse ‘.’ ao fim gerando seu erro.
Mas dá um olhada no método , java.lang.String[], java.io.File)]exec(String[] cmdarray, String[] envp, File dir). Ele aceita um File como parametro, dá uma lida com calma no javadoc dele e veja se não pode ser algo útil a você.

M

Consegui contornar o problema:

File fAle = new File(Config.getPastaAleatorios());
                 
           List l =Arrays.asList(fAle.listFiles());
           
           for (Iterator i = l.iterator(); i.hasNext();) 
            aleatorios += i.next().toString()+" ";

command = "mplayer -noborder -nosound -shuffle -quiet -slave -loop 0 -wid " + winid+ " "+ aleatorios  ;

Runtime.getRuntime().exec(command);

Muito obrigado pela ajuda!

E

Vou explicar exatamente qual é o problema do “*”.

Como você deve ter aprendido, o shell interpreta os argumentos antes de passá-los ao programa . Então, se você chamar em um shell algo como:

mplayer *.mp4

o shell converte isso para

mplayer abc.mp4 bdf.mp4 xxx.mp4

antes de chamar o mplayer.

(supondo que no diretório corrente os arquivos abc.mp4, bdf.mp4 e xxx.mp4 estejam presentes).

Portanto, o mplayer (ou qualquer outro programa, inclusive o java) nunca enxerga um parâmetro com “*” e sim os nomes destrinchados dos arquivos.

É também por isso que você tem de usar algo parecido com “find . -name *.java -print” ou coisa parecida, quando vai usar o “find”, porque só desse jeito (usando um “*”) você evita que o shell interprete o argumento antes de passar ao programa.
O “find” faz a busca por conta própria, em vez de reservar isso para o shell, porque ele precisa fazer uma busca recursiva e o shell não faz buscas recursivas.

souzabolivar

Olá entanglement!

Eu estou precisando é descobrir uma forma de passar comandos para o mplayer em tempo de excução.

Por exemplo, quando ele estiver tocando um vídeo eu vou la no terminal e digito “mplayer -fs” e ele passa para tela cheia.

Alguém sabe como fazer isso?

Ficaria muito grato se alguém me ajudasse com esse problema.

Criado 26 de outubro de 2011
Ultima resposta 25 de jun. de 2012
Respostas 9
Participantes 4