2016-07-31 67 views
0
String[] command = { "cmd.exe", "/C", "Start", "skype" }; 
Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec(command); 

你好,我想在java中启动skype!我有这个问题: 我使用上面的代码,在eclipse中它的工作原理是完美的,但是当我将它编译为runnable jar时,它会陷入无限循环,新的java进程将启动,直到整个java崩溃!Java开始运行时Skype

问题出在这部分代码中。 (当我评论它一切正常,但Skype没有启动)

哪里可以解决问题?

编辑*

我做节目的小例子:

主要类:

package Client; 

public class DemoMain { 


    public static void main(String[] args) { 
     new Demo(); 
    } 

} 

Process类:

package Client; 

import java.io.IOException; 

public class Demo { 


    public Demo(){ 
     try { 
      Runtime.getRuntime().exec(new String[]{ "cmd.exe", "/C", "Start", "skype" }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

结果:Task Manager view

在eclipse编译器中它非常棒!问题是程序从Runnable jar启动时

+0

此代码正好运行一个命令一次。唯一合乎逻辑的解释是**代码**围绕着这个代码进行循环。你真的很想创建一个“最小可行”的例子,它会给你错误并在这里发布完整的代码。我们无法从正确的代码中知道你身边有什么问题!所以请看帮助中心;了解你如何提问,以便我们有机会给你一个有用的答案。 – GhostCat

回答

0

先定义一个批处理文件,然后调用该批处理文件。 定义了一个方法并且不使用构造方法。

public static String os_exec(String[] cmds) 
    { 
     int ret = 0, i = 0; 
     StringBuffer sb = new StringBuffer(); 
     Process process = null; 
     String line = null; 
     BufferedReader bufferedReader = null; 
     try 
     { 
      ProcessBuilder pb = new ProcessBuilder(cmds); 
      pb.redirectErrorStream(true); 
      process = pb.start(); 
      pb.redirectErrorStream(true); 
      bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       i += 1; 
       sb.append(line); 
       if(i > 1) 
       { 
        sb.append("\r\n"); 
       } 
      } 
      ret = process.waitFor(); 
     } 
     catch (Exception e) 
     { 
      StringBuffer err = new StringBuffer(); 
      for(String commond : cmds) 
      { 
       err.append(commond); 
       err.append(' '); 
      } 
      sb.append(e.getMessage()); 
     } 
     finally 
     { 
      if(bufferedReader != null) 
      { 
       try 
       { 
        bufferedReader.close(); 
        process.destroy(); 
       } 
       catch (Exception e) 
       { 
        sb.append(e.getMessage()); 
       } 
      } 
     } 
     return sb.toString(); 
    } 

的start.bat

start C:\skype.exe 

调用os_exec();

String[] command = { "cmd.exe", "start.bat" }; 
os_exec(command); 
+0

是否可以运行保存在.jar中的批处理文件? (在资源中) –

+1

你应该添加日志并打印异常 –

+0

在我的情况下,我需要bat文件里面的可运行罐 是否有可能在那里运行它? –