Olá pessoas tô tentando em um botão do meu formulário rodar um arquivo bat mas ñ tô conseguindo
try {
Runtime.getRuntime().exec("C:/arquivo.bat");
} catch (Exception e) {
e.printStackTrace();
}
o q pode ser?
Olá pessoas tô tentando em um botão do meu formulário rodar um arquivo bat mas ñ tô conseguindo
try {
Runtime.getRuntime().exec("C:/arquivo.bat");
} catch (Exception e) {
e.printStackTrace();
}
o q pode ser?
Cade o print da exception?
A partir da versão 1.6 do Java, executar arquivos ficou muito mais simples. Veja a especificação da classe java.awt.Desktop, em especial o método open(File). (http://java.sun.com/javase/6/docs/api/java/awt/Desktop.html)
Para obter uma instância de Desktop, invoque o método estático getDesktop().
tentei isso
String backup = “c:\arquivo.bat”;
try {
Desktop.getDesktop().open(new File(backup));
} catch (Exception e) {
e.printStackTrace();
}
mas n funciionou
ele fala isso
java.lang.IllegalArgumentException: The file: c:\arquivo.bat doesn't exist.
at java.awt.Desktop.checkFileValidation(Desktop.java:191)
e o arquivo EXISTE! e la no c:
Mude o seu código aqui:
String backup = "c:\arquivo.bat";
Para:
String backup = "c:" + File.separator + "arquivo.bat";
Evite o uso explícito do caracter separador de diretórios. Dê preferência para o atributo separator, da classe File.
Outro motivo pode ser a inexistência de privilégio para executar o arquivo.
Note que na Exception é especificada a linha 191 da classe Desktop. Verificando o código nessa linha:
190 if (!file.exists()) {
191 throw new IllegalArgumentException("The file: "
192 + file.getPath() + " doesn't exist.");
193 }
nota-se que ele invocou o método exists() da classe File. Consultando o código do método exists():
728 public boolean exists() {
729 SecurityManager security = System.getSecurityManager();
730 if (security != null) {
731 security.checkRead(path);
732 }
733 return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0);
734 }
Na linha 729 ele obtém uma instância do SecurityManager, o qual pode estar verificando que você não possui o privilégio necessário. Mas isso é apenas uma hipótese!!!
Tb acredito nessa sua hipotese de privilegio pois mudei o codigo conforme vc me disse e da o mesmo erro
java.lang.IllegalArgumentException: The file: c:\arquivo.bat doesn't exist.
at java.awt.Desktop.checkFileValidation(Desktop.java:191)
, porem como deixo ele com permissao para abrir de forma segura o meu arquivo .bat?
Você tentou salvar o arquivo em outro local (por exemplo, no diretório MEUS DOCUMENTOS do seu usuário) e tentar executar novamente?
Você é o ADMINISTRADOR da máquina?
Fiz alguns testes executando arquivos .bat e não obtive nenhum problema.
sim sou administrador da maquina e tentei colocar meu arquivo bat em otro lugar e xamar ele e da o mesmo problema simplesmente ele n abre da como arquivo n existe como pode coloquei ele na minha raiz e xamei ele e da como invalido =/ alguem ja passo por isso ?
Invoque o método estático isDesktopSupported(), da classe Desktop, para verificar se é suportado por sua plataforma.
Desktop.isDesktopSupported();
coloquei isso no meu actionperformed
Desktop.isDesktopSupported(); ele n me retorno nada!
tentei isso tb e url me retorna null nao sei pq
String backup = "C:" + File.separator + "arquivo.bat";
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
URL url = Thread.currentThread().getContextClassLoader().getResource(backup);
System.out.println("url = "+url);
java.io.IOException: Cannot run program "c:\backup\arquivo.bat": CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
problema continua
tentei muda de pasta
Invoque o método estático isDesktopSupported(), da classe Desktop, separadamente, apenas para fins de teste, sem tentar executar o arquivo bat.
Se retornar TRUE, significa que há suporte, por parte de sua plataforma, quanto ao uso de Desktop;
Se FALSE, então sua plataforma não dá suporte.
Isso aparentemente significa que o evento que você está escutando não foi disparado. :lol:
try {
//java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
//URL url = Thread.currentThread().getContextClassLoader().getResource(backup);
Desktop.isDesktopSupported();
} catch (Exception e) {
e.printStackTrace();
}
nao retorna nada! eh isso mesmo? o probleminha dificil esse =[
Ei, ei, ei…
Mas na linha 4 você está apenas invocando o método, NÃO está armazenando o resultado ou apresentando na tela, que é o nosso objetivo.
Muda o código para:
1. try {
2. //java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
3. //URL url = Thread.currentThread().getContextClassLoader().getResource(backup);
4. System.out.println( "Plataforma Suporta Desktop? " + Desktop.isDesktopSupported() );
5. } catch (Exception e) {
6. e.printStackTrace();
7. }
Note que eu incluí um System.out.println na linha 4.
Tenta de novo!!!
biluquinha, isDesktopSupported() retorna um boolean, ele não vai imprimir nada na tela se você não mandar imprimir.
Só uma pergunta, quando você clica duas vezes nesse arquivo.bat, ele executa um prompt de comandos ou abre um arquivo texto no bloco de notas?
Se puder abra um prompt(Iniciar->Executar-> digite cmd ou aperte Win+R), navegue até a raiz de c: onde está o teu arquivo bat, (digite c: e cd /) e use o comando dir bat, e tire um alt + print screen da janela pra gente ver.
Isso ou confirme que o arquivo é realmente um .bat
Plataforma Suporta Desktop? true
Bruno, ele abre o prompt de comando n abre o bloco de notas
AMIGOS, consegui quando dei o comando bat vi q mu arquivo estava com o nome arquivo.bat.bat, tirei o .bat e rodo com sucesso muito obrigado pela atencao de todos vcs de coracao, vlw mesmo PROBLEMA RESOLVIDO!