Gostaria de saber se existe uma possibilidade de executar um .bat(o qual executa um outro jar) através de um jar.
O cenário é o seguinte.
Tenho uma aplicação A(Serviço) na qual devera ser chamada através de um outro aplicativo java desktop. Ja tentei as seguinte alternativas porem nenhuma com sucesso.
Tentei chamar de dentro do aplicativo desktop via replection e não obtive sucesso abaixo segue o código:
File jarPath = new File("C:/CaminhoDoMeuJarDeServico/Servico.jar");
urls = new URL[]{jarPath.toURL()};
URLClassLoader classLoader = new URLClassLoader(urls,this.getClass().getClassLoader());
Object parametrosObjeto[] = {new String[]{}};
Class parametrosClasse[] = {parametrosObjeto[0].getClass()};
Class classe = classLoader.loadClass("br.com.teste.ServiceMain");
Object instancia = classe.newInstance();
Method metodoMain = classe.getDeclaredMethod("main", parametrosClasse);
metodoMain.invoke(instancia, parametrosObjeto); //executa o metodo
Erro: [b]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at Main.start2(Main.java:63)
at Main.main(Main.java:19)
Caused by: java.lang.NullPointerException
at br.com.teste.ServiceMain(Unknown Source)
… 6 more
[/b]
Tentei criar um bat no qual ficaria o cargo de chamar a aplicação (Serviço) também não deu segue abaixo os códigos e erros.
try {
Process p = Runtime.getRuntime().exec("C:/DiretorioDoBat/teste.bat");
if (p.exitValue() == 0) {
System.out.println("Programa terminou normalmente");
}
} catch (Exception e) {
e.printStackTrace();
}
Erro:
[b]
java.lang.IllegalThreadStateException: process has not exited
at java.lang.ProcessImpl.exitValue(Native Method)
at Main.start3(Main.java:37)
at Main.main(Main.java:16)
[/b]
outra tentativa de executar o .bat
try{
File f = new File("C:/DiretorioDoBat/teste.bat");
ProcessBuilder builder = new ProcessBuilder(new String[] {dir});
Process proc = builder.start();
proc.waitFor();
System.out.println("done");
} catch(IOException e){
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Erro:
Não deu nenhum erro porem não chamou a aplicação
OBS: Se eu colocar dentro do bat apenas “nodepad” ele inicializa o notepad normalmente mas se eu colocar dentro do bat o código "start javaw -jar Service.jar ai não funciona.
Extensão .exe ele consegue executar normalmente o problema é quando tem chamada de java dentro do .bat.
da erro.